Hallo Leute,
habe nun ein Problem mit dem Singelton-Muster.
Das Muster wird dann eingesetzt, wenn nur eine Instanz von einer Klasse existieren soll.
Hab ich aus dem PHP Magazine 1.04. Funktioniert auch wunderbar, nur es gibt ein Prob. es können keine Argumente/Parameter übergeben werden. Also versuchte ich das Muster auszubauen. Leider ohne Erfolg...
Der Test
ergab folgendes:
Ist auch kein wunder durch die Funktion join wurde das Objekt in ein String umgewandelt. Auch andere versuche schlugen fehl. Hat jemand eine zündende Idee.
cheers
habe nun ein Problem mit dem Singelton-Muster.
PHP-Code:
function &singelton($class)
{
static $singelton;
if (!is_object($singelton))
{
$singelton = new Singelton();
}
return $singelton->insatnce($class);
}
class Singelton
{
var $instances = array();
function Singelton(){}
function insatnce($class)
{
if (!isset($this->instances[$class])
OR !is_object($this->instances[$class]))
{
$this->instances[$class] = new $class();
}
$pointer =& $this->instances[$class];
return $pointer;
}
}
PHP-Code:
class Test
{
var mtime = null;
function Test()
{
$this->mtime = microtime();
}
function getTime()
{
return $this->mtime;
}
}
$test = singelton('Test');
echo $test->getTime();
sleep(2);
$test = singelton('Test');
echo $test->getTime();
PHP-Code:
function &singelton($class, $params=array())
{
static $singelton;
if (!is_object($singelton))
{
$singelton = new Singelton();
}
return $singelton->insatnce($class, $params);
}
class Singelton
{
var $instances = array();
function Singelton(){}
function insatnce($class, $params=array())
{
if (!isset($this->instances[$class])
OR !is_object($this->instances[$class]))
{
if (sizeof($params) > 0)
$this->instances[$class] = new $class(join(', ', $params));
else
$this->instances[$class] = new $class();
}
$pointer =& $this->instances[$class];
return $pointer;
}
}
PHP-Code:
class Foo
{
function Foo(){ }
function FooBar()
{
return 'FooBar';
}
}
class Bar
{
var $obj = null;
function Bar($objFoo)
{
if(!is_object($objFoo))
die('$objFoo is not a valid object');
$this->obj = $objFoo;
return $this->obj->FooBar();
}
}
$objBar = singelton('Bar', singelton('Foo'));
Code:
$objFoo is not a valid object
cheers
Kommentar