2014-04-27 85 views
2

我正在開發使用Laravel 4.網站我有這段代碼在我的車型之一:PHP - 語法錯誤,意外「(」,預計「)」

class MyModel extends Eloquent { 
    protected $var = array(
     "label" => Lang::get("messages.label"), 
     "code" => "myCode", 
    ); 
    ... 
} 

但是我給這句法錯誤在哪裏我以前Lang::get行:

syntax error, unexpected '(', expecting ')' 

然後,我改變了我的代碼到這一點:

class MyModel extends Eloquent { 
    protected $var; 

    public function __construct() { 
     $this->var = array(
      "label" => Lang::get("messages.label"), 
      "code" => "myCode", 
     ); 
    } 
} 

和錯誤,我們nt走了!我認爲這個錯誤是非常混亂和無益的。爲什麼PHP顯示此錯誤消息?

+1

可能的重複[獲取嘗試初始化此公共類變量使用dirname()方法外的錯誤](http://stackoverflow.com/questions/6155965/getting-an-error-trying-to-initialize- this-public-class-variable-using-dirname) –

回答

3

這是因爲您在定義類屬性時使用Lang::get(),這是不允許的。調用像靜態方法的東西只能在runtime(當代碼正在執行時)完成。

定義類時,它們的屬性只能是非變量(或「常量」)值(例如整數,字符串或本身只包含非變量值的數組)。

運行時代碼應該放入構造函數中。

+0

這可能是我在這種情況下展示過的PHP中至少沒有解釋的錯誤消息。男人,我把頭撞在牆上。 – morksinaanab

+0

@morksinaanab是的,你必須知道PHP是如何工作的,以便理解錯誤,即使這樣也不是那麼明顯。不過,錯誤消息在新版本的PHP中有所改進。 –

1

問題是因爲你調用Lang :: get這是初始化你的類屬性時的一個函數,而類屬性的默認值只能是常量值。

您正確地在構造函數中初始化這些屬性。

相關問題