2010-11-28 28 views
8

這裏是行不通的代碼:如何在PHP中使用類常量到類屬性中?

class MyClass 
{ 
    const myconst = 'somevalue'; 

    private $myvar = array(0 => 'do something with '.self::myconst); 
} 

看來,類常量不提供「編譯時」,但只在運行時。 有誰知道任何解決方法?在你的類聲明(定義將無法正常工作)

感謝

+0

如果您正在尋找類似於C宏的東西,那麼PHP不會以這種方式工作。此外,沒有「編譯時間」。 PHP是一名口譯員。 – stillstanding 2010-11-28 14:37:09

+0

編寫本手冊的人似乎有一個「編譯時間」的印象。 http://www.php.net/manual/en/language.oop5.properties.php – 2010-11-28 14:50:54

回答

10

的問題不在於你用的是恆定的,但是,你正在使用的表達式。

類成員變量被稱爲「屬性」。 (...)通過使用關鍵字public,protected或private之一定義它們,然後使用正常的變量聲明。這個聲明可能包括一個初始化, ,但是這個初始化必須是一個常量值 - 也就是說,它必須能夠在編譯時進行評估,並且不能依賴運行時信息進行評估。

這個簡單的聲明,比如,不會編譯(解析錯誤):

class MyClass{ 
    private $myvar = 3+2; 
} 

但是,如果我們改變你的類聲明中使用簡單的常量,而不是字符串拼接與不變它將按預期工作。

class MyClass{ 
    const myconst = 'somevalue'; 
    public $myvar = array(0 => self::myconst); 
} 

$obj = new MyClass(); 
echo $obj->myvar[0]; 

作爲變通,你可以在構造函數初始化屬性:

class MyClass{ 
    const myconst = 'somevalue'; 
    public $myvar; 

    public function __construct(){ 
     $this->myvar = array(0 => 'do something with '.self::myconst); 
    } 
} 
$obj = new MyClass(); 
echo $obj->myvar[0]; 

我希望這可以幫助你,
阿林

相關問題