phpbar.de logo

Mailinglisten-Archive

AW: [php] Statische methoden in PHP4

AW: [php] Statische methoden in PHP4

Andreas Demmer php at andreas-demmer.de
Fre Feb 11 12:15:02 CET 2005


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