__construct 方法的疑问?

问:
方法1个方法2建议用那种?
方法1和方法2有什么差别?

<?php

namespace App\Controller;

class Test
{
    public $A;

    //1方法->construct
    public function __construct(A $a)
    {
        $this->A=$a;
    }

    //2方法->construct
    public function __construct()
    {
        $this->A=new A();
    }

    //无论是方法1还是方法2在这用起来都一样
    public function testSayA()
    {
        return $this->A->say();
    }

}
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
最佳答案
  • 方法 1 个方法 2 建议用那种?方法 1
  • 方法 1 和方法 2 有什么差别?
    诚然,两种方法都能够实现需要达到的目的,但方法1涉及了依赖注入设计模式,主要目的是转移依赖关系,不必自己在代码中维护依赖对象。
    这是我以前写的一篇博客,可供参考:zhangajian.com/post/li-jie-yi-lai-...
5个月前 评论
讨论数量: 7
wanghan

当然是1了,要不然咋面试时候都问依赖注入

5个月前 评论

如果代码是面向抽象的 那选1。

如果不是 就单纯面向实体的 可选1 可选2 如果代码中用到这个实例少 选2可以跳过容器中各种实例化的判断 用的多 从容器中可以直接取实例化好的对象 可以避免重复实例化 看自己取舍。

大多情况下 是选1比较好的

5个月前 评论

当然是 1,你这个是只需要 A。假如你有需要 B, C,D 岂不是要把 A B C D全部都 new 一遍。 1 的好处就是需要啥就传啥

5个月前 评论

你还是没明白依赖注入是怎么回事

5个月前 评论

__construct是构造函数,在创建该类的实例时,__construct(A $a)意味着可以在创建new Test()类时,可以传入一个A类型的实例new Test(new A())

5个月前 评论
  • 方法 1 个方法 2 建议用那种?方法 1
  • 方法 1 和方法 2 有什么差别?
    诚然,两种方法都能够实现需要达到的目的,但方法1涉及了依赖注入设计模式,主要目的是转移依赖关系,不必自己在代码中维护依赖对象。
    这是我以前写的一篇博客,可供参考:zhangajian.com/post/li-jie-yi-lai-...
5个月前 评论

你首先要明白reflect

5个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!