Mailinglisten-Archive |
Christian Wohlgemuth wrote: > Hallo ML, > > ich habe eine Frage zum Thema oop: > > Angenommen ich habe 3 Klassen, wovon ein Klasse (classOne) ein > Verbindung zur DB herstellt und die anderen zwei Klassen (classTwo, > ClassThree) diese Verbindung brauchen. > Nun muss ich classTwo und classThree die Klasse classOne mit > 'übergegeben', was wie folgt geschehen kann: > > > 2. Möglichkeit: > $classOne = new classOne(); > $classTwo = new classTwo(&$classOne); > $classThree = new classThree(&$classOne); Die Möglichkeit sollte man schonmal nicht verwenden, weil es keinen Sinn macht. Kommt nur 'ne Fehlermeldung bei rum... Oder zumindest 'ne Notice. > 3. Möglichkeit: > class classTwo { > public function __conctruct() { > $classOne = new classOne(); > } > } > class classThree { > public function __conctruct() { > $classOne = new classOne(); > } > } Diese Möglichkeit solltest du immer dann verwenden, wenn deine classTwo/classThree in jeder Instanz eine eigene Instanz der Klasse classOne haben soll und es sich dabei auch immer definitiv um eine Instanz der classOne handeln soll (und nicht beispielsweise eine Unterklasse von classOne). > > > 4. Möglichkeit [ungetestet] > class classTwo { > public function __conctruct() { > global $classOne; > } > } > class classThree { > public function __conctruct() { > global $classOne; > } > } Das ist ist den meisten Fällen keine gute Idee. Es funktioniert zwar schon, aber macht deinen Quelltext fürchterlich unübersichtlich. > 5. Möglichkeit > class classTwo extends classOne {} > class classThree extends classOne {} Dies Möglichkeit solltest du immer verwenden, wenn du die classOne (zu Erweiterungs- oder Verhaltensänderungszwecken) verändern willst. Da musst du dich allerdings echt etwas mit OOP und den Vorteilen, coolen Tricks und sonstwas aueinander setzen. > 1. Möglichkeit: > $classOne = new classOne(); > $classTwo = new classTwo($classOne); > $classThree = new classThree($classOne); Die nimmst du dann für alle Fälle die jetzt noch über bleiben. Ok, es gibt noch weitere Möglichkeiten für bestimmte Spezialfälle (zum Beispiel Singleton), aber das geht jetzt zu sehr ins Detail. > > > Nun meine Frage: welche dieser, mir bekannten, 5 Möglichkeiten sollte > man benutzen und warum? Wie du siehst: Die Frage ist nicht ganz so einfach zu beantworten... > > Vielen Dank und schönen Feierabend da draussen > Christian Wohlgemuth Gute Nacht, Yannik
php::bar PHP Wiki - Listenarchive