PHP中的注册表或单例模式?

Jas*_*vis 10 php registry singleton

我现在正在使用PHP类和对象.在这个问题中,字段和方法的名称只是为了让你了解我在说什么.

它与使用单例和注册表设计模式有关.

现在假设我需要访问数据库对象,缓存对象,核心设置对象,几乎所有其他类中的Session对象,我需要访问这些对象.所以我会使用注册表将所有这4个对象存储到1个注册表类对象中.然后我可以将easiyl传递给我的1个对象到需要访问这些对象的任何其他对象.所以这听起来很棒,但是如果我有一些不需要所有4个对象的类,那么如果我只需要在我的其他一些类中访问Database对象或Session对象呢?对于性能,最好只在这些其他对象中使用单例,还是继续使用我的注册表?

我不太清楚PHP中的对象如何工作以了解是否会有任何类型的性能增益(更少的内存使用,CPU使用,加载时间).

因此,任何有这方面经验的人都可以告诉我,如果使用其中一个获得任何收益,我现在处于以太流行的阶段,而不影响生产时间或任何事情.如果我能够,我想用最好的方法.

Bre*_*hns 4

这取决于您的应用程序。如果您仍然需要 4 个类中的 3 个,那么使用注册表比仅独立处理 3 个类更理想,因为您不需要第四个类。延迟加载类是减少内存占用的一种方法,但是您需要指示注册表何时创建对象,这与处理单例没有太大区别。或者,您可以创建一个 n 参数构造函数或使用数组来指示您的注册表在构造期间要实例化哪些类。

class Registry {
    public $class1;
    public $class2;

    function __construct($uses) {
        foreach($uses as $class) {
            $this->{$class} = new {$class}();
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

然后通过指定要实例化的类来实例化您的注册表。

$reg = new Registry(array('class1'));
Run Code Online (Sandbox Code Playgroud)

您显然希望构造函数处理零参数,以默认实例化所有类。