#1 28. März 2009 [OOP] MySQL in 2.Klasse benutzen Ich bin gerade am überlegen welche Methode besser/Performanter ist. Wenn ich die MySQL Verbindung in der zweiten Klasse neu erstelle, Global: PHP: Class MySql () {...}Class B extends A () {private db ; __construct () { $this -> db = new MySql ();...}} Oder die Verbindung manuel übergebe: PHP: Class MySql () {...}Class B extends A () {private db ; __construct ( dbconnection ) { $this -> db = dbconnection ;...}} Vielleicht kann sich hier ein Entwickler mit mehr OOP Erfahrung melden. (Murdoc? ) Welche Vorteile/Nachteile gibt es? Auch angenommen ich erstelle mehrere Objekte von der Klasse B. + Multi-Zitat Zitieren
#2 28. März 2009 AW: [OOP] MySQL in 2.Klasse benutzen Vllt. solltest du überlegen einfach die MySQL-Instanz einmal beim Start des Scripts so anzulegen, dass global darauf zugegriffen werden kann also ne Wrapper-Klasse die die Verbindung statisch speichert und zurückgeben kann. + Multi-Zitat Zitieren
#3 28. März 2009 AW: [OOP] MySQL in 2.Klasse benutzen singleton-pattern: PHP: <? php class MySQL { private static $_instance = null ; private function __construct () { //verbinden etc. etc... } public static function getInstance () { if(!( self :: $_instance instanceof self )) self :: $_instance = new self (); return self :: $_instance ; } } class B extends A { public function __construct () { $this -> db = MySQL :: getInstance (); } } ?> bei verschiedenen layern einfach noch ne factory einbaun + Multi-Zitat Zitieren
#4 29. März 2009 AW: [OOP] MySQL in 2.Klasse benutzen Danke für die Antworten! Ich habe mir jetzt diese Entwurfsmuster angeschaut, so wies aussieht ist das Singleton-Pattern genau das richtige, da man die MySQL Klasse nur einmal im gesamten Skript braucht. (In verschiedenen Klassen). Nur was ein "Layer" und ein Factory-Pattern ist habe ich nicht richtig verstanden. Heute morgen ist mir dann auch die Idee gekommen einfach die MySQL Klasse als Referenz zu übergeben/erstellen, scheint hier allerdings nicht so sinvoll oder ist das das selbe wie die Instanz zu übergeben? Habe ich da was grundlegend falsch verstanden? + Multi-Zitat Zitieren
#5 29. März 2009 AW: [OOP] MySQL in 2.Klasse benutzen Eine Klasse als Referenz übergeben? Du meinst eine Instanz? Die wird automatisch als Referenz übergeben... Murdoc hat mich auch schonmal hier auf den singleton pattern aufmerksam gemacht. Seit dem arbeite ich damit. Dadurch gewinnt das Programm etwas mehr an Modularität (falls es den Begriff gibt). + Multi-Zitat Zitieren
#6 29. März 2009 AW: [OOP] MySQL in 2.Klasse benutzen Autsch. Klar meinte ich eine Instanz. ------ Könnte mir noch bitte jemand erklären was ein "Layer" in php ist? Factory weis ich jetzt. PS.: Nutzt von euch jemand Netbeans? Ich bekomme leider keine Autovervollständigung (Auflistung aller verfügbaren Methoden und Instanzvariablen) , wenn ich das ganze per Singleton mache. PHP: require_once 'class_mysql.php' ;public function __construct () { $this -> _db = Mysql :: getInstance (); $this -> _db -> connect (); // nach "$this->_db" kommt keine Autovervollständigung, ich bin schreibfaul, kann ich das irgendwie ändern? } + Multi-Zitat Zitieren
#7 29. März 2009 AW: [OOP] MySQL in 2.Klasse benutzen mit layern meinte ich, wenn du verschiedene treiber für den datenbankzugriff verwendest. so: PHP: <? php class Database { //methoden bla private static $_instance = null ; public static function getInstance () { if(!( self :: $_instance instanceof self )) self :: $_instance = self :: factory (); return self :: $_instance ; } public static function factory () { $layer = 'MySQL' ; if(! class_exists ( $layer )) require 'pfad/zu/treibern/' . $class . '.php' ; return new $layer ; } } class MySQL extends Database { //methoden etc } class B extends A { public function __construct () { $this -> db = Database :: getInstance (); } } ?> + Multi-Zitat Zitieren
#8 29. März 2009 AW: [OOP] MySQL in 2.Klasse benutzen Ah, ok danke. Jetzt hab ichs verstanden. + Multi-Zitat Zitieren