2017-10-21 44 views
1

我對使用特徵的想法很陌生。我的理解是行爲可以在類中水平共享。在我的項目中,以下代碼在每個班級的頂部重複使用。特徵構造函數中的未定義變量

class Loader { 

    protected $options; 

    /** 
    * Loader constructor. 
    */ 
    public function __construct() { 
     $this->options = get_option('xenword_options'); 
     $this->init(); 
    } 

由於這是在幾十個課上完成的,建立一個特質是一個很好的追求方向嗎?

這是我的失敗嘗試。一個名爲Options.php的文件被創建。內容如下:

trait getOptions { 
    public $options; 

    public function __construct() { 
     $this->$options = get_option('xenword_options'); 
    } 
} 

不幸的是,PhpStorm給出了一個消息未定義變量「選項」。當這個代碼處於類結構中時,這不是問題。

因爲我是新來的特質,任何意見和指針將不勝感激。先謝謝你。

回答

1

你快到了。

@SignpostMarv是正確的部分,該$this->$option是錯了,不是因爲它是一個語法錯誤,但因爲與$一個錯字,應該是->options->$options(你可以檢查http://sandbox.onlinephpfunctions.com/code/3a40de64bb87d8838b5368dd6fe69d128603c37b)。

而現在,你有你特質必須將其包含在類

class Loader { 
    use starter; 
} 

trait starter { 
    protected $options; 

    public function __construct() { 
     $this->options = 'xenword_options'; 
     $this->init(); 
    } 

    public function init() { 
     $myClass = __CLASS__; 
     echo "{$myClass} started"; 
    } 
} 

爲了測試它只是做new Loader()看到該消息。 (檢查:http://sandbox.onlinephpfunctions.com/code/55b517142fb8d74b8b5a3e2246c79b6428330297

+0

謝謝!我完全錯過了$。 – LPH

0

$ this - > $ options是一個語法錯誤。

你想$ this-> options。

+0

_ $此 - > $選項是一個語法error._這是不正確的(檢查:http://sandbox.onlinephpfunctions.com/code/3a40de64bb87d8838b5368dd6fe69d128603c37b) – mloureiro

+0

我會詞組它的另一個辦法; $ options在範圍內不存在,因此會觸發錯誤。你想使用$ this-> options。 – SignpostMarv