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

问题描述 投票:-4回答:1

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

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上阅读官方文档,但一无所获。这是非常有趣的情况。

php class static
1个回答
0
投票

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();
© www.soinside.com 2019 - 2024. All rights reserved.