Hallo zusammen,
ich habe folgendes Problem: Ich brauche ein Sigleton und habe nur PHP4 (nicht 5) zur Verfügung. Mein Ansatz ist folgender:
class FormFieldManager {
var $types = array();
function getInstance() {
static $instance;
echo("getInstance<br>");
if (!isset($instance)) {
echo("Neue Instanz<br>");
$instance = new FormFieldManager();
}
return $instance;
}
function registerFieldType($inFieldType) {
array_push($this->types, $inFieldType);
}
function getTypes() {
return $this->types;
}
}
$a = FormFieldManager::getInstance();
$b = FormFieldManager::getInstance();
$a->registerFieldType("bla");
echo (sizeof($a->getTypes()). "\t" . sizeof($b->getTypes())."<br>");
$b->registerFieldType("blub");
echo (sizeof($a->getTypes()). "\t" . sizeof($b->getTypes()));
Der Aufruf liefert folgende Ausgabe:
getInstance
Neue Instanz
getInstance
1 0
1 1
Man sieht also, dass die getInstance-Methode schon ganz gut funktioniert. Es wird wie gewünscht nur beim ersten Aufruf eine Instanz erzeugt. So weit; so gut.
Somit sollten $a und $b identisch sein, oder?
Nun füge ich bei $a mit registerFieldType() etwas hinzu und lasse mir die Größe der types-Arrays ausgeben. Und siehe da: $a und $b unterscheiden sich. Warum???
Was mache ich falsch?
Vielen Dank im Vorraus!