PHP中保持实例全局或在函数范围内的最佳实践


Best practice in PHP to keep instances global or within function scope

我有一个由amfphp使用的类,我正在使用其中的一些其他类来执行多个任务。我很好奇,保持这些类的实例全局或在函数范围内的最佳实践是什么。

例如

对于全局变量$config。我在函数中这样使用它:

global $config;

对于作用域变量我这样做。

$config = new Config();

现在当我的程序运行时,它处理特定的任务并关闭一切(我假设),对于另一个不同的任务再次调用相同。

现在哪一个更好,性能更有效?

因为PHP是基于请求的,所以在初始化对象的地方没有太大的区别,因为它无论如何都会在每个请求上重新创建,但是使用全局变量被认为是不好的做法,不应该在新代码中使用。

我建议像第二个例子那样创建一个配置类,但如果你在代码的几个地方都需要它,不要每次都创建一个新实例,而是使用依赖注入或单例模式。

单:

public class Config
{
    protected static $instance;
    public static Instance()
    {
        if(self::instance === null)
            self::instance = new Config(self::key);
        return self::instance;
    }
    private static $key = "213453452";
    public function __construct($key)
    {
        if($key !== self::key)
            throw new InvalidArgumentException("Private Constructor");
    }
    //your config
}

依赖注入(简单示例):

public class MyClass
{
    protected $config;
    public __construct($config)
    {
        $this->config = $config;
    }
    public function DoWork()
    {
        $subClass = new MySubClass($this->config);
        //To Stuff
    }
}
$config = new Config();
$myClass = new MyClass($config);
$myClass->DoWork();