为什么我不能用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
为什么?!
发布于 2013-02-02 18:36:40
http://php.net/language.oop5.properties
类成员变量称为“属性”。您可能还会看到它们使用其他术语,如“属性”或“字段”,但为了本引用的目的,我们将使用“属性”。它们是通过使用一个关键字公共、受保护或私有,然后是一个普通变量声明来定义的。这个声明可能包括一个初始化,但是这个初始化必须是一个常量值--也就是说,它必须能够在编译时被求值,并且必须不依赖于运行时信息才能被计算。
重要的是
也就是说,它必须能够在编译时进行评估。
表达式是在运行时计算的,因此不可能使用表达式初始化属性:它们只是还不能计算。
发布于 2013-02-02 18:36:33
( RTM ;)
请参阅properties http://www.php.net/manual/en/language.oop5.properties.php第一段的最后一句。
这个声明可能包含一个初始化,但是这个初始化必须是一个常量值--也就是说,它必须能够在编译时被求值,并且不能依赖于运行时信息来进行计算。
发布于 2013-02-02 18:57:16
您不能执行代码来生成静态变量的值,因为根据定义,静态变量在编译时会受到影响,请参见:
获取变量的运行时值或调用函数(运行时也不能)不能在编译时完成,因为它们不会受到静态变量的影响。
https://stackoverflow.com/questions/14665097
复制相似问题