PHP函数调用类属性

时间:2013-02-02 18:33:08

标签: php static pdo singleton

为什么我不能在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

为什么?!

3 个答案:

答案 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)

您无法执行代码来生成静态变量的值,因为根据定义,静态变量在编译时会受到影响,请参阅:

获取变量的运行时值或调用函数(也是运行时)无法在编译时完成,因为它们不会受到静态变量的影响。