I would talk about a pattern whose name I fail to know before, giving it the name of multi-singleton.
Registry pattern
I read about it in PHP 5 certification study guide from php|architect’s series. This is the example given:
class Registry {
private static $_register;
public static function add(&$item, $name = null)
{
if (is_object($item) && is_null($name)) {
$name = get_class($item);
} elseif (is_null($name)) {
$msg = "You must provide a name for non-objects";
throw new Exception($msg);
}
$name = strtolower($name);
self::$_register[$name] = $item;
}
public static function &get($name)
{
$name = strtolower($name);
if (array_key_exists($name, self::$_register)) {
return self::$_register[$name];
} else {
$msg = "’$name’ is not registered.";
throw new Exception($msg);
}
}
public static function exists($name)
{
$name = strtolower($name);
if (array_key_exists($name, self::$_register)) {
return true;
} else {
return false;
}
}
}
Simple enough, also I would like to talk about a function:
spl_object_hash($object)
This return an hash from an object. And now, more simply, I have a singleton, which I use to get info about an account, but also I want to use that class to give me info given an object. Thus:
class MySingleton {
static private $instance = null;
static private $_obj_register = array();
static public function getInstance() {
if(self::$instance == null) {
$c = __CLASS__;
self::$instance = new $c;
}
return self::$instance;
}
public function getInfoForNode($node) {
$hash = spl_object_hash($node);
if(!array_key_exists($hash, MySingleton::$_obj_register)) {
// something to calc from $node and other singleton datas
// ....
// and store in array
self::$_obj_register[$hash] = $node->nid;
}
return self::$_obj_register[$hash];
}
}
I mixed the two, and dynamic method refer to static property.
Refer
Php|architect’s Zend PHP 5 Certification Study Guide Pro PHP: Patterns, Frameworks, Testing & More: Patterns, Frameworks, Testing and More
From Amazon.it
PHP]Architect’s Zend PHP 5 Certification Study Guide Pro PHP: Patterns, Frameworks, Testing and More
kindle!