有問題的代碼...定義對象屬性時不能運行函數嗎?
class MyClass
{
public $template_default = dirname(__FILE__)."/default.tpl";
}
爲什麼我會收到以下錯誤,當我試圖定義一個對象的屬性時使用的dirname()
功能?
我猜對象屬性不像PHP變量。
有問題的代碼...定義對象屬性時不能運行函數嗎?
class MyClass
{
public $template_default = dirname(__FILE__)."/default.tpl";
}
爲什麼我會收到以下錯誤,當我試圖定義一個對象的屬性時使用的dirname()
功能?
我猜對象屬性不像PHP變量。
沒錯。從docs:
This declaration may include an initialization, but this initialization must be a constant value--that is, it must be able to be evaluated at compile time and must not depend on run-time information in order to be evaluated.
由於dirname
是一個運行時函數,它應該在對象的構造函數被調用。因此,在對象構造函數中設置$template_default
:
class MyClass {
public $template_default;
public function __construct(){
$this->template_default = dirname(__FILE__). "/default.tpl";
}
}
如果您使用的是PHP 5.6,你可以做到以下幾點:
class MyClass
{
public $template_default = __DIR__."/default.tpl";
}
PHP 5.6允許簡單的標量的數學和字符串連接在現在初始化(docs ),並且__DIR__
與dirname(__FILE__)
是相同的東西。
否則,德雷克斯的回答是正確的。
謝謝!沒有意識到之前定義屬性。 – Monty