Supportnet / Forum / Skripte(PHP,ASP,Perl...)
Problem mit this-Zeiger auf Objekte
Frage
Hallo,
ich habe ein merkwürdiges Phänomen mit objektorientierter Programmierung unter PHP.
Ich habe eine Klasse 'Textfield'. Diese Klasse hat eine Methode setName($name) und getName().
Von dieser Klasse erstelle ich mir 2 Objekte und rufe jeweils die Methode setName($name) auf.
Dann habe ich eine zweite Klasse 'Formular'. Diese Klasse hat eine Methode putObject($object) und eine Methode showObjects(). Über die putObject Methode kann ich ein Objekt der Klasse Textfield empfangen. Die Objekte werder in dieser Klasse in einem Array gespeichert. Die Methode showObjects() durchläuft das Array und ruft in allen gefundenen Objekten die Methode getName() auf.
Hier ein Codeausschnitt in dem ich die Objekte erzeuge:
$tf1 = new Textfield();
$tf1->setName("Erstes Textfeld");
$tf2 = new Textfield();
$tf2->setName("Zweites Textfeld");
$form = new Formular();
$form->putObject($tf1);
$form->putObject($tf2);
Jetzt das große Problem:
Wenn ich in der Klasse Formular in der Methode showObjects() das Array, welches die beiden Textfield Objekte enthält, mit einer for oder foreach durchlaufe und in den Objekten die Methode getName() aufrufe, bekomme ich immer nur den Namen des letzten Objektes angezeigt. Und das auch noch zweimal. Obwohl ich den beiden Textfield-Objekten über die Methode setName($name) unterschiedliche Namen gegeben habe.
Vielleicht könnt ihr mir besser helfen wenn ich kurz die Klasse Formular, in der das Phänomen auftritt, erläutere. Diese Klasse hat eine Klassenvariable "var $objectArray" in dieses Array schreibt die Methode putObject($object) per
$this->objectArray[] = $object;
die beiden Textfield Objekte.
Beim auslesen in showObjects() durchlaufe ich mit einer foreach-Schleife per
foreach($this->objectArray as $a) {
print $a->getName()."<br>";
}
die Objekte. Und auf dem Bildschirm wird zweimal (so oft wie Textfield-Objekte existieren) der Name des letzten Objektes ausgegeben.
Ich hoffe ihr könnt mir helfen.
Vielen Dank und Gruß
Jan

