为什么我不能在PHP中执行此操作?其中Database
是单例类,getInstance()返回PDO对象。
<?php
class AnExample
{
protected static $db = Database::getInstance();
public static function doSomeQuery()
{
$stmt = static::$db->query("SELECT * FROM blah");
return $stmt->fetch();
}
}
与任何其他PHP静态变量一样,静态属性只能使用文字或常量初始化;表达式是不允许的。因此,虽然您可以将静态属性初始化为整数或数组(例如),但您可能不会将其初始化为另一个变量,函数返回值或对象。
http://php.net/manual/en/language.oop5.static.php
为什么?!
答案 0 :(得分:3)
http://php.net/language.oop5.properties
类成员变量称为“属性”。您也可以使用“属性”或“字段”等其他术语来查看它们,但出于本参考的目的,我们将使用“属性”。它们通过使用public,protected或private之一,然后是普通变量声明来定义。 此声明可能包含初始化,但此初始化必须是常量值 - 也就是说,它必须能够在编译时进行评估,并且必须不依赖于运行时信息才能进行评估。强>
重要的部分是
也就是说,它必须能够在编译时进行评估
表达式是在运行时进行评估的,因此无法使用表达式来初始化属性:它们根本就不可评估。
答案 1 :(得分:0)
RTM;)
请参阅PHP文档中第一段的最后一句,了解属性http://www.php.net/manual/en/language.oop5.properties.php
本声明可以 包括初始化,但这个初始化必须是一个常量 value - 也就是说,它必须能够在编译时进行评估 不得依赖于运行时信息才能进行评估。
答案 2 :(得分:0)
您无法执行代码来生成静态变量的值,因为根据定义,静态变量在编译时会受到影响,请参阅:
获取变量的运行时值或调用函数(也是运行时)无法在编译时完成,因为它们不会受到静态变量的影响。