#1
| |||
| |||
[PHP]Zugriff von einer Unterklasse auf eine andereFolgendes Beispiel: PHP-Code: Wie greife z. B. von der Klasse C auf die Variable $test2 von Klasse B und auf die Variable $test von Klasse A zu? |
#2
| |||
| |||
Hi. Vererbung in PHP hab ich mich zwar noch nicht mit beschäftigt, aber ersteres geht so nicht. Die eine Klasse hat (bis auf die Basis) nichts mit der anderen zu tun. Einzige Möglichkeit: B::example(); Das zweite könnte so aussehen (ungetestet und ungeprüft): parent->test (von B nach A) B::test2 (von C nach A). Ansonsten musst du halt ein B initialisieren. __________________ Patrick Gotthardt Patrick Gotthardt on Software |
#3
| |||
| |||
PHP-Code: Hab mal folgendes probiert. Allerdings meldet PHP, dass die Variable b kein Objekt ist. Allerdings kann ich in der Klasse C die Variable test folgendermaßen ausgeben: PHP-Code: |
#4
| ||||
| ||||
Wenn du von der Klasse C aus auf $this->b als Objekt zugreifen willst ist es kein Wunder das dass nicht funktioniert, schliesslich wurde $this->b bis dato noch nicht als Instanz einer Klasse bzw. als Objekt definiert. Um auf $this->b als Instanz der Klasse B zuzugreifen müsstest du in C::example() erstmal eine Intanz erzeugen, also $this->b = new B; Das in A::example() dies getan wird bringt dir nichts, da diese Methode ja nicht aufgerufen wird. Du kannst im Übrigen auf eine Objekteigenschaft nur von innerhalb dieses Objekts bzw. über $objekt->eigenschaft zugreifen. Solange du keine Instanz einer Klasse erzeugt hast kannst du nicht über die Klasse::Methode() Syntax auf eine Objekteigenschaft zugreifen, da du mit dieser Syntax kein Objekt erstellt hast. Ebenfalls kann die Klasse::Methode() Funktion nicht auf die eigenen Eigenschaften zugreifen da diese, ohne instanziierung durch den new Operator und Zugriff mit $objekt->eigenschaft, noch nicht definiert sind. Wenn du also mit einem Objekt auf die Eigenschaften von drei Klassen zugreifen willst muss von jeder dieser Klassen eine Instanz existieren. Du könntest das z.B. so lösen das die zweite Klasse die Erste erweitert und die Dritte das gleiche mit der Zweiten macht. Wenn du dann eine Instanz der dritten Klasse erstellst hättest du die Methoden und Eigenschaften aller drei Klassen in einem Objekt. Beispiel: PHP-Code: Code: Ich bin die Eigenschaft A::propertyA! Ich bin die Eigenschaft B::propertyB! Ich bin die Eigenschaft C::propertyC! http://www.php.net/manual/de/language.oop.php |
#5
| |||
| |||
Geht das auch, in dem es eine Oberklassse und mehrere Unterklassen gibt oder nur mit deiner Methode (eine Klasse erweitert immer eine andere)? Zitat:
PHP-Code: |
#6
| ||||
| ||||
Zitat:
Zitat:
Wenn du mit $this->xyz auf eine Eigenschaft oder Methode zugreifst so bezieht sich das auf eine Eigenschaft oder Methode innerhalb des eigenen Objekts. Da die Klasse C in deinem Code-Beispiel aber nur in der Eigenschaft $a->c als Objekt abgeleitet ist greifst du mit $this->b vom Objekt $a->c nicht auf die Eigenschaft $a->b zu sondern auf die Eigenschaft 'b' im Objekt $a->c, also auf $a->c->b, was aber bis dahin nicht als Objekt definiert wurde. Folglich schlägt der Aufruf $a->c->b->example() mit "Call to a member function on an non-object" fehl. |
Stichworte |
- |