PHP MVC 全局变量

PHP MVC Globals Variables

我有点怀疑,我明白使用全局变量是一种不好的做法。

我有一个带有 php 的小型 MVC 应用程序,我想在其中创建一个名为 config.php 的文件.. 并在其中保存我将在我的 类,例子...

$config = array ();
$config ['db_host'] = 'localhost';

现在,我想知道将此文件包含在我的应用程序中的推荐方法是什么..我已经实现了一个自动加载器,我可以将它包含在此...

Class Autoload
{
    public function __construct () {
        global $ config;
        require_once 'config.php';
    }
}

但我真的不知道这是不是一个好习惯...

非常感谢您..

一般来说,使用全局变量或单例变量不是一个好习惯。您想要的是 "dependency injection." 此模式使您能够使用模拟对象进行测试。本文提供了依赖注入的一些理念和实践。 https://iconoun.com/blog/2017/05/05/php-globals-vs-dependencies/

你可以创建一个 class 而不是全局变量,就像这样

class Autoload {

    public $value1;
    public $value2;
    public static instances = array();

    public static function instantiate($className) {
        if (isset($instances[$className])) {
            return $instances[$className];
        }
        $newInstance = new $className();
        $newInstance->value1 = "foo";
        $newInstance->value2 = "bar";
        return $instances[$className] = $newInstance;
    }
}

并且您可以继承此 class 以用于更具体的情况,例如,不同的用户类型。