Mailinglisten-Archive |
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