phpbar.de logo

Mailinglisten-Archive

[php] Grundwissenfrage oop

[php] Grundwissenfrage oop

Yannik Hampe yannik at cipher-code.de
Die Nov 18 19:05:47 CET 2008



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