Mailinglisten-Archive |
Hallo, das Topic ist zwar PHP4, aber hier ist eine PHP5 Implementierung, die als Funktion, nicht als Klasse realisiert ist. Diese lässt sich mit wenig Aufwand nach PHP4 zurückportieren. Sie ist darauf konzipiert, Klassen dynamisch nachzuladen (wie etwa __autoload()) und kommt auch mit Vererbung zurecht. /** * Singleton * * This function loads classfiles and creates unique instances of the * requested classes. The first argument is the name of the class, * followed by an arbitrary amount of arguments for ist constructor. * * @author Andreas Demmer <mail at andreas-demmer dot de> * @version 1.0.0 * @package ONTIS std 1.0.0 * @return object */ function singleton() { static $objects; /* init vars */ $objects = is_array($objects) ? $objects : array(); $arguments = func_get_args(); $classArguments = array(); /* evaluate classname and arguments */ if(count($arguments) === 0) { throw new Exeption('singleton function misses classname'); } elseif(count($arguments) > 1) { $className = array_shift($arguments); foreach($arguments as $argument) { if(is_object($argument)) throw newException('singleton does not support objects as arguments'); $classArguments[] = "'".$argument."'"; } } else { $className = $arguments[0]; } $objectClassName = $className; while((bool)$className) { /* load classfile if class is not defined */ if(!class_exists($className)) { include_once PATH_CLASSES.strtolower($className).'.class.'.PHP_SUFFIX; if(!class_exists($className)) throw new Exception('class undefined after including classfile'); } /* load parent classfile if parent class is not defined */ $className = get_parent_class($className); } /* generate command and execute */ $classArgumentString = implode(',', $classArguments); $command = '$objects[\''.$objectClassName.'\'] = new '.$objectClassName.'('.$classArgumentString.');'; eval($command); return $objects[$objectClassName]; } ?> Gruß, Andreas -- http://www.andreas-demmer.de
php::bar PHP Wiki - Listenarchive