PHP 5.6 可以做惊人的事情!我不能在__construct中使用类的静态变量


PHP 5.6 can do Amazing Things! I can't use static vars of class in __construct

为什么这段代码不起作用?

final class Db
{
    private static $data = [];
    private function __construct()
    {
        self::$data['host']  = 'localhost';
        self::$data['user']  = 'mysql';
        self::$data['passw'] = 'mysql';
        self::$data['db']    = '123';
    }
    public static function test()
    {
        var_dump(self::$data);
    }
}
Db::test();

我阅读了 php.net 的官方文档,但一无所获。这是非常有趣的情况。

Pepmap modder 的评论是正确的,您期望对静态对象上的构造函数进行调用,该对象未实例化(构造)。 在调用测试方法之前,可以重命名该方法并显式调用它。我添加了一些代码,允许您通过传递参数来设置它。

静态变量很好。

final class Db
{
    private static $data = [];
    public static function initData($data = NULL) {
        if ($data) {
            self::$data = $data;
        }
        else {
            self::$data['host']  = 'localhost';
            self::$data['user']  = 'mysql';
            self::$data['passw'] = 'mysql';
            self::$data['db']    = '123';
        }
    }
    public static function test() {
        var_dump(self::$data);
    }
}
Db::initData();
Db::test();