Mailinglisten-Archive |
Hoi Liste, mal wieder einen Beitrag zum Singleton-Muster. Vorlage war der Entwurf von Herrn Demmer hier: http://www.phpmag.de/itr/online_artikel/psecom,id,466,nodeid,62.html Nach meinem Verständnis soll mit diesem Muster verhindert werden das Kopien eines Objekts erstellt werden. Wenn die Aufgabenstellung ist zu verhindern das ein Objekt neu instanziert wird dann gebt mir ein PLONK. (Und wenn da kein unterschied ist fang ich wieder bei Lingo an ;) Im Beispiel erstelle ich zwei Objekte (A und B) beide können die microtime() speichern oder zurückgeben. Bei der ersten getTime() Ausgabe sind beide Zeiten gleich. Dann setze ich die Zeit eines(!) Objektes neu und die Zeiten sind unterschiedlich. Wenn ich vom Objekt direkt eine Referenz erstelle funktioniert es. Heisst das dass return (PHP 4.3.4) nur Kopien zurückgibt? Ich hoffe ihr seids noch nicht Leid ;) <?php session_start(); class Singleton { function Singleton() { } function instance($class) { if ( isset($_SESSION) ) { if ( ! isset($_SESSION['instances']) ) $_SESSION['instances'] = array(); if ( ! isset($_SESSION['instances'][$class]) ) { $_SESSION['instances'][$class] = new $class(); } return ($_SESSION['instances'][$class]); } exit("Singleton Session Pattern: No Session Active"); } } class MyClass { var $time = 0; function MyClass() { $this->setTime(); } function getTime(){ return $this->time; } function setTime(){ $this->time = microtime(); } } //Globale Instanz holen $a = Singleton::instance('MyClass'); $b = Singleton::instance('MyClass'); //$b = & $a; echo "A ".$a->getTime()."<br />"; echo "B ".$b->getTime()."<br />"; $b->setTime(); echo "A ".$a->getTime()."<br />"; echo "B ".$b->getTime()."<br />"; session_unset(); ?>
php::bar PHP Wiki - Listenarchive