Im folgenden Code existieren zwei Klassen. Klasse zwei enthält dabei ein Array, in dem beliebig viele Instanzen von Klasse eins gespeichert werden.
Problemstellung: Nun sollen alle Werte der Instanzen von eins geändert werden, dazu existiert eine Funktion newWert in eins. Da das öfter mal vorkommt erstelle ich eine Funktion newWertInEins in zwei, die für jede Instanz von eins die Funktion newWert ausführt.
Nur leider funktioniert das nicht... Hier der Code:
Besonders verwirrend ist für mich, dass ich dank $pruefung herausgefunden habe, dass newWert in eins wirklich 7 mal aufgerufen ist, ich verstehe allerdings, warum sich der Wert nicht ändert wenn ich newWertInEins aufrufe... Es klappt erst, wenn ich für jedes Array-Element newWert() separat ausgebe... Bildschirmausgabe:
Hat jemand ne Idee wo der Fehler liegt?
Problemstellung: Nun sollen alle Werte der Instanzen von eins geändert werden, dazu existiert eine Funktion newWert in eins. Da das öfter mal vorkommt erstelle ich eine Funktion newWertInEins in zwei, die für jede Instanz von eins die Funktion newWert ausführt.
Nur leider funktioniert das nicht... Hier der Code:
PHP:
<?php
# Klasse 'eins' enthält Werte
class eins {
var $wert;
function eins() {
$this->wert = 1;
}
function newWert() {
$this->wert = 5;
global $pruefung;
$pruefung++; # prüft, ob und wie oft newWert ausgeführt wird
}
}
# Klasse 'zwei' enthält mehrere Instanzen von 'eins'
class zwei {
var $arr;
function zwei() {
$this->arr[0] = new eins();
$this->arr[1] = new eins();
$this->arr[2] = new eins();
$this->arr[3] = new eins();
$this->arr[4] = new eins();
$this->arr[5] = new eins();
$this->arr[6] = new eins();
}
function newWertInEins() {
reset($this->arr);
while (list($key, $obj) = each($this->arr)) $obj->newWert();
}
}
# Variablen initialisieren
$pruefung = 0;
# Objekt erstellen und initialisierte Werte ausgeben
$test = new zwei();
reset($test->arr);
while (list($key, $obj) = each($test->arr)) echo $obj->wert.'<br>';
echo '<br><br>';
# Funktion aufrufen, die für jedes Element von $arr die Funktion newWert() in Klasse 'eins' aufruft
$test->newWertInEins();
# Wie oft wurde newWert() in Klasse 'eins' aufgerufen?
echo $pruefung.' Aufrufe von newWert() in Klasse <i>eins</i><br><br>';
# Alle Werte ausgeben
reset($test->arr);
while (list($key, $obj) = each($test->arr)) echo $obj->wert.'<br>';
echo '<br><br>';
# so gehts....
echo "so gehts...<br>";
$test->arr[0]->newWert();
$test->arr[1]->newWert();
$test->arr[2]->newWert();
$test->arr[3]->newWert();
$test->arr[4]->newWert();
$test->arr[5]->newWert();
$test->arr[6]->newWert();
# Alle Werte ausgeben
reset($test->arr);
while (list($key, $obj) = each($test->arr)) echo $obj->wert.'<br>';
echo '<br><br>';
?>
Besonders verwirrend ist für mich, dass ich dank $pruefung herausgefunden habe, dass newWert in eins wirklich 7 mal aufgerufen ist, ich verstehe allerdings, warum sich der Wert nicht ändert wenn ich newWertInEins aufrufe... Es klappt erst, wenn ich für jedes Array-Element newWert() separat ausgebe... Bildschirmausgabe:
Code:
1
1
1
1
1
1
1
7 Aufrufe von newWert() in Klasse eins
1
1
1
1
1
1
1
so gehts...
5
5
5
5
5
5
5
Hat jemand ne Idee wo der Fehler liegt?