PHP5.6可以做令人惊奇的事情!我不能在_构造中使用类的静态变量
为什么这个代码不起作用PHP5.6可以做令人惊奇的事情!我不能在_构造中使用类的静态变量,php,class,static,Php,Class,Static,为什么这个代码不起作用 final class Db { private static $data = []; private function __construct() { self::$data['host'] = 'localhost'; self::$data['user'] = 'mysql'; self::$data['passw'] = 'mysql'; self::$data['db'
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();
__当实例化新实例时,在对象的作用域上触发构造。你在任何地方实例化过对象吗?如果你从未运行过构造函数,那么你的值永远不会被赋值/定义,所以。。。除了PEBKAC之外,这里的问题到底是什么?您将在任何其他5.x版本的PHP中体验到这种行为,并且在任何OOP语言中都会遇到这种情况。这一切归结为混合了静态类和对象上下文。您可以不用尝试使用类来完成所有这些。谢谢,先生。我明白了