phpbar.de logo

Mailinglisten-Archive

[php] singleANton

[php] singleANton

elias ghostwwinside at gmx.net
Fre Mar 5 20:43:54 CET 2004


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