2015-05-26 62 views
0

有問題的代碼...定義對象屬性時不能運行函數嗎?

class MyClass 
{ 
    public $template_default = dirname(__FILE__)."/default.tpl"; 
} 

爲什麼我會收到以下錯誤,當我試圖定義一個對象的屬性時使用的dirname()功能?

​​

我猜對象屬性不像PHP變量。

回答

4

沒錯。從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"; 
    } 
} 
+0

謝謝!沒有意識到之前定義屬性。 – Monty

1

如果您使用的是PHP 5.6,你可以做到以下幾點:

class MyClass 
{ 
    public $template_default = __DIR__."/default.tpl"; 
} 

PHP 5.6允許簡單的標量的數學和字符串連接在現在初始化(docs ),並且__DIR__dirname(__FILE__)是相同的東西。

否則,德雷克斯的回答是正確的。

相關問題