Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中为重要类创建良好的注册表类_Php_Oop_Singleton_Registry - Fatal编程技术网

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

在PHP中为重要类创建良好的注册表类,php,oop,singleton,registry,Php,Oop,Singleton,Registry,我有一个Web应用程序,其中我使用注册表类。registry类包含我需要的重要类,这些类会破坏我的应用程序 我已经将registry类设置为Singleton类,这个类是静态的 注册表类的内容如下所示: <?php class registry { private static $objects = array(); private static $instance; private function __construct(){} private fun

我有一个Web应用程序,其中我使用注册表类。registry类包含我需要的重要类,这些类会破坏我的应用程序

我已经将registry类设置为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;
    }
}
?>
我在应用程序中经常使用这些类,每个方法至少使用一次

现在我的问题是最好的做法是什么:

1) 每次都打电话给我

2) Class
$registry=registry::singleton()一次,然后只使用局部变量。(我不知道这是否有效)

或者有没有更优雅的方法来解决这个问题。

(2)会很好,试试看。如果您在每个方法中使用它几次,它将为您节省一些输入


可以考虑在代码< >代码集>(或代码>)中添加一些健全性检查,以确保文件在RealthEngult>/Cuth>之前存在,以及如果不进行日志记录和/或返回一个错误(对于SythGET()/代码>相同)。

< P>是否将注册表实例分配给本地变量是无关的。如果这是您唯一关心的问题,请在特定的代码块中使用使代码更可读的内容

我更关心的是必须将注册表类名硬编码到我的其他类中的影响,以及我是否真的需要注册表的单例。看一看

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