Heim  >  Artikel  >  Backend-Entwicklung  >  依赖注入跟::调用方法,哪种好,有什么区别?

依赖注入跟::调用方法,哪种好,有什么区别?

WBOY
WBOYOriginal
2016-08-04 09:22:111612Durchsuche

请问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被更改了。!!!
也就是违反了开放封闭原则。
大致是这样~嘻嘻

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn