2013-02-02 79 views
1

爲什麼我不能在PHP中執行此操作?其中Database是一個單例類,getInstance()返回一個PDO對象。類屬性中的PHP函數調用

<?php 

class newPHPClass { 

    protected static $db = Database::getInstance(); 

    public static function doSomeQuery() 
    { 
     $stmt = static::$db->query("SELECT * FROM blah"); 
     reutrn $stmt->fetch(); 
    } 

} 

「像任何其他PHP靜態變量,靜態屬性可以僅使用初始化的字面或常數;表達式不允許因此,儘管你可以初始化一個靜態屬性爲整數或陣列(例如),您不能將它初始化爲另一個變量,函數返回值或對象。「

http://php.net/manual/en/language.oop5.static.php

爲什麼?

+0

不要使用單例並解決問題。 – 2013-02-02 18:47:10

回答

0

http://php.net/language.oop5.properties

類成員變量被稱爲 「屬性」。您也可以使用其他術語(如「屬性」或「字段」)來查看它們,但出於此參考的目的,我們將使用「屬性」。它們是通過使用關鍵字public,protected或private之一來定義的,後面跟着一個正常的變量聲明。 該聲明可能包含一個初始化,但是這個初始化必須是一個常量值 - 也就是說,它必須能夠在編譯時進行評估,並且不能依賴運行時信息進行評估。

的重要組成部分,是

也就是說,它必須能夠在編譯時

表達式在運行時進行評估進行評估,因此無法使用表達式來初始化屬性:它們現在還不能評估。

0

RTM)

查看PHP文檔中的第一款用於性能http://www.php.net/manual/en/language.oop5.properties.php

該聲明可以 包括初始化的最後一句,但這種初始化必須是一個常量 值 - 也就是說,它必須能夠在編譯時進行評估,並且 必須不依賴於運行時信息才能被評估。