phpbar.de logo

Mailinglisten-Archive

[php] Zugriff in Methode von Parentklasse auf Property von Childklasse funktioniert nicht

[php] Zugriff in Methode von Parentklasse auf Property von Childklasse funktioniert nicht

Jan Piotrowski piotrowski at gmail.com
Sam Dez 13 19:52:28 CET 2008


Hallo Liste,

ich spiele gerade ein wenig mit PHP5 herum und habe offensichtlich einen
fürchterlichen Knoten im Hirn:

Fatal error: Cannot access private property
Tiefkuehlkorb::$tiefkueühlItems in X:\...\Warenkorb.class.php on line 47

Kurze Erläuterung:

- Abstrakte Klasse Warenkorb.
- Tiefkühlkorb implementiert/erweitert Warenkorb um Property.
- Wie kann von Warenkorb geerbte Methode in Tiefkühlkorb auf diese
Property zugreifen?

Ausführliche Version:

Ich habe einen (abstrakten) "Warenkorb". Ein Warenkorb hat 2 'Räume'
(Arrays), in die die ausgewählten Artikel reinkommen: einen Raum für
Getränke, einen für Essen. Es gibt eine Methode addItem() die ein "Item"
im passenden Raum ablegt.

Von diesem seltsamen Warenkorb gibt es nun 2 Implementierungen: Einen
"Egokorb", auf den man groß seinen Namen schreiben kann, und einen
"Tiefkühlkorb", in dem es einen zusätzlichen Raum für Items vom Typ
Tiefkühlware gibt.

Der Egokorb ist kein Problem, der erweitert einfach alles vom Warenkorb
und kriegt zusätzlich eine neue Property in der man den Namen speichern
kann.

Der Tiefkühlkorb allerdings fügt einen dritten Raum als Property hinzu.
addItem() ist vom Warenkorb vererbt und nutzt somit (vereinfacht)
$this->$raum[] = $item; um die Sachen hinein zu legen. Da der
Tiefkühlraum allerdings erst im Tiefkühlkorb dazu kommt hat diese
Methode keinen Zugriff auf dieses Property und ich kriege obige
Fehlermeldung.

Wie kann die ererbte Methode von Warenkorb Zugriff auf den zusätzlichen
Raum im Tiefkühlkorb bekommen?
Oder gehe ich da grundsätzlich was falsch an?
Ich könnte addItem() (und alle davon genutzten Funktionen, die Zugriff
auf die $tiefkuelItems brauchen) in Tiefkuehlkorb einfach reinkopieren -
aber das kann doch nicht die Lösung sein, oder?

Grüße,
Jan

PS: Ja, Ego- und Tiefkühlkorb ist natürlich ein dummes vereinfachtes
Beispiel, aber die effektive Aufgabe ist ohne Kontext noch schwerer zu
verstehen.

php::bar PHP Wiki   -   Listenarchive