依賴注入跟::呼叫方法,哪一種好,有什麼差別?

WBOY
發布: 2016-08-04 09:22:11
原創
1659 人瀏覽過

請問laravel 在類別的建構方法裡面依賴注入__construct(User $user)然後後面的方法都直接用$this->user 調用,跟直接使用User::find()有什麼區別?比較推薦哪一種?

回覆內容:

請問laravel 在類別的建構方法裡面依賴注入__construct(User $user)然後後面的方法都直接用$this->user 調用,跟直接使用User::find()有什麼區別?比較推薦哪一種?

這是php類別的靜態方法和動態方法的差別。
靜態方法不需要類別實例化就能直接透過class::function使用,但在宣告的時候必須要有static關鍵字。
而動態方法則必須透過類別的實例化才能呼叫。

<code class="php">$class= new Class;
$class->somefunc();</code>
登入後複製

兩種方法並沒有孰優孰劣,關鍵看用到的場景。
一般情況下,如果並不是邏輯關聯性十分緊密,則建議使用靜態方法。因為動態方法其實需要隱性的傳入一個參數:$this,對效能略有影響。

不懂php,不過在「依賴接口,而非依賴實作」在程式設計領域是個基本的想法。
但介面不是實際的對象,如何呼叫呢,這就需要注入,我們可以把所有註入在物理上集中到一個地方。這樣當想修改一個類別的實作時,只要修改一個地方就好了。

<code>Class A{
    function __construct(User $user){
    }
}
Class B{
    function __construct(){
        $user = User::find(['id'=>1]);
    }
}
$user = User::find(['id'=>1]);
$a = new A($user);
$b = new B();
</code>
登入後複製

如果以後有業務上的改動,使用
GoodUser extends User {}
程式碼需要更改

<code>Class B{
    function __construct(){
        $user = GoodUser::find(['id'=>1]);
    }
}
$user = GoodUser::find(['id'=>1]);
$a = new A($user);
$b = new B();
</code>
登入後複製

有沒有發現,類B被更改了。 ! ! !
也就是違反了開放封閉原則。
大致是這樣~嘻嘻

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板