【发布时间】:2013-02-02 18:33:07
【问题描述】:
为什么我不能在 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
为什么?!
【问题讨论】:
-
不要使用单例,问题解决了。
-
用于初始化静态属性的表达式在编译期间被评估。你的表达式调用了一个函数,这意味着代码执行。