這裏是行不通的代碼:如何在PHP中使用類常量到類屬性中?
class MyClass
{
const myconst = 'somevalue';
private $myvar = array(0 => 'do something with '.self::myconst);
}
看來,類常量不提供「編譯時」,但只在運行時。 有誰知道任何解決方法?在你的類聲明(定義將無法正常工作)
感謝
這裏是行不通的代碼:如何在PHP中使用類常量到類屬性中?
class MyClass
{
const myconst = 'somevalue';
private $myvar = array(0 => 'do something with '.self::myconst);
}
看來,類常量不提供「編譯時」,但只在運行時。 有誰知道任何解決方法?在你的類聲明(定義將無法正常工作)
感謝
的問題不在於你用的是恆定的,但是,你正在使用的表達式。
類成員變量被稱爲「屬性」。 (...)通過使用關鍵字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];
我希望這可以幫助你,
阿林
注意,對於PHP 5.6及以上 ,這是可能的。
參見https://secure.php.net/manual/en/migration56.new-features.php:
現在可以提供涉及在PHP先前預期的靜態值的上下文,諸如常數和屬性的聲明和默認功能的數字和字符串文字和/或常數一個標量表達式參數。
如果您正在尋找類似於C宏的東西,那麼PHP不會以這種方式工作。此外,沒有「編譯時間」。 PHP是一名口譯員。 – stillstanding 2010-11-28 14:37:09
編寫本手冊的人似乎有一個「編譯時間」的印象。 http://www.php.net/manual/en/language.oop5.properties.php – 2010-11-28 14:50:54