Nein, eigentlich nicht. Hast du unterschiedliche Rückgabewerte?
Ich schreibe das allerdings immer etwas anders:
PHP-Code:
<?php
class MyClass
{
protected static $_instances = array(); // eigenschaften, ob statisch oder nicht direkt in den klassen kopf
public static function getInstance($id) // egal welche reihenfolge public/static
{
if (!array_key_exists($id, self::$_instances)) { // egal ob isset/array_key_exists
self::$_instances[$id] = new Foo($id); // egal ob self:: oder MyClass::
}
return self::$_instances[$id];
}
}
?>
Ich definiere die statische Eigenschaft also für die Klasse, nicht für die Methode. Der Unterschied ist wohl einzig der, dass bei deiner Variante nur diese Methode darauf zugreifen kann, bei meiner die ganze Klasse. Ob man das will bleibt offen, aber deine Variante kommt mir doch sehr altbacken aus der prozeduralen Welt bekannt vor ..
Im Übrigen werden Objekte in PHP 5 implizit als Referenz übergeben, das & aus &getInstance kannst du also getrost streichen. Wenn du die umgekehrte Variante möchtest, benutz das Schlüsselwort "clone". Aber das ist wohl etwas OT.