Hallo.
Da du ja die Connection schon hast, kannst du dir obige Zeile sparen und in der nächsten das $mysqli durch self::$_db_connection ersetzen.
Alles klar.
»» Argh - jetzt bin ich wieder völlig überfordert und weiß nicht mal ob ich mich in einer YAGNI-Welt befinde, denn die ganze Zeit sitze ich daran eine db-Klasse auf Singleton-Pattern aufzubauen und nun sind alle Methoden static und ich kann jederzeit auf sie zugreifen auch ohne die Instanz.
Auch gut, dann weg mit der öffentlichen Instanz. Wenn du nach außen hin nur noch statische Methoden übrig hast, dann kann das Singleton weg. Oder besser: bau es zu einem lazy connect um. Du hast ja jetzt nur noch öffentliche Methoden à la db::query(...) und keinen mehr, der die Verbindung aufbaut. Dann brauchst du doch eine private und statische _getConnection(), die quasi als internes Singleton die Connection erstellt oder die erstellte bereitstellt.
_WAAASSSS_ *mit einer Wimper zuck*... jetzt bin ich ja wieder an dem Punkt angelangt wo ich vor geschätzten 50 Beiträgen schon war.
Static vs. Singleton Pattern
Vorteile, Nachteile, was macht jetzt mehr Sinn und wie sollte ich die Klasse ausrichten. Ich könnte ja theoretisch auch die Methoden nicht static machen und dann rein Singleton benutzen bevor ich das alles zum 200. mal wieder neu umschreibe. Ich bin wieder völlig verwirrt, was denn nun das "beste" ist für eine Datenbankklasse.
Du wirst sie ja vermutlich gleich noch mal umarbeiten ... :-) Deswegen kommentiere ich nicht alles.
-.-"
Unabhängig von den Umbauplänen: Die Meldung ist für ein Singleton nicht sehr sinnig. Der else-Zweig sollte ganz weg, denn wenn die Instanz schon da ist, soll sie einfach rausgegeben werden.
Ja stimmt soweit habe ich nicht gedacht, hast Recht.
»» 3 Typen:
»» Typ 1: foo,bar
»» Typ 2: 'foo','bar'
»» Typ 3: foo='bar',foo='bar',
»» Typ 4: ?,?,? - MySQLi Platzhalter für prepared Statements
»» if($rwu==1||$rwu==2){ // Typ 1 oder 2
»» } elseif($rwu==3) { // Typ 3
»» } elseif($rwu==4) { // Typ 4Es gibt Klassenkonstanten. Nutze diese statt nichtssagender Zahlen und dein Quelltext wird ein Stück lesbarer.
Wie soll das dann aussehen?
Auch dafür bieten sich Klassenkonstanten mit sprechenden Namen an. (Übrigens: Die Bezeichnung RUDI gefällt mir am besten, üblicher aber sprachlich unschön ist CRUD (Create statt Insert). Nur damit du es mal gehört hast.)
Danke =), ich find RUDI aber ebenfalls schöner..
»» Weitere Fragen in meinem Kopf sind ausserdem immernoch:
»» 1. Sollte der "Connect" im Konstruktor stattfinden oder nicht?Mit dem Umstieg auf nur noch öffentliche statische Methoden brauchst du eigentlich nur noch ein mysqli-Objekt, das du dir in einer privaten statischen Klassenvariable merken kannst. Einen Konstruktor brauchst du nicht. Du kannst ihn private und leer lassen, damit keine Instanz erstellt werden kann, aber selbst wenn: solange es nur statisches Zeug gibt, nützt eine Instanz nichts, denn sie hat keine Methoden und keine Eigenschaften, die man aufrufen könnte.
Also habe ich dann die Methode _getConnection() die eine Verbindung zur Dátenbank macht, diese Verbindung speicher ich dann lokal in der Methode wo _getConnection() aufgerufen wird, richtig?
So das halt wirklich die Datenbank verbindung _nur_ bei einem Query kurzzeitig aufgebaut wird.
Wie baue ich Sie danach wieder ab?
mit $_Connection->close() ?
Lg,
Chris