在PHP中为重要的类创建良好的注册表类

我有一个使用注册表类的Web应用程序.注册表类包含重要的类,这些类在我的应用程序中都是必需的.

我已经使注册表类成为Singleton类,并且该类是静态的.

注册表类的内容在这里:

<?php
class registry
{
    private static $objects = array();
    private static $instance;

    private function __construct(){}
    private function __clone(){}

    public static function singleton()
    {
        if( !isset( self::$instance ) )
        {
            self::$instance = new registry();
        }
        return self::$instance;
    }

    public function storeObjects()
    {
        $Objects = array_merge($GLOBALS['EXTRA_LIBS'],array('data','page','session','uri','loader','modules'));

        foreach($Objects as $name)
        {
            $this->$name  = $name;
        }
    }

    public function __set( $object, $key )
    {
        require_once(__LIBRARIES . DS . $object . '.class.php');
        self::$objects[ $key ] = new $object( self::$instance );
    }

    public function __get( $key )
    {
        if( is_object ( self::$objects[ $key ] ) )
        {
            return self::$objects[ $key ];
        }
    }

    public function returnAllObjects()
    {
        return self::$objects;
    }
}
?>

现在,每当我想在我的应用程序中使用这里的类之一时,我就会做:

registry::singleton()->data->adddata('somedata');

我在应用程序中经常使用这些类,每种方法最少使用1次.

现在我的问题是最好的方法是:

1)每次都打电话

2)类$registry = Registry :: singleton();每种方法一次,然后只使用局部变量. (我不知道这是否行得通)

还是有一个更优雅的方法来解决这个问题.

解决方法:

是否将注册表实例分配给本地变量无关紧要.如果这是您唯一关心的问题,请使用使代码在特定代码块中更具可读性的方法.

我将更加担心必须将Registry类名硬编码到其他类中的含义,以及我是否真的需要Singleton用于注册表.看一下Dependency Injection.

上一篇:JavaScript类属性未遵循其值


下一篇:PHP:是否可以访问像这样的静态方法:Object :: ChildObject :: method()?