__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();
    }

}
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
最佳答案
  • 方法 1 个方法 2 建议用那种?方法 1
  • 方法 1 和方法 2 有什么差别?
    诚然,两种方法都能够实现需要达到的目的,但方法1涉及了依赖注入设计模式,主要目的是转移依赖关系,不必自己在代码中维护依赖对象。
    这是我以前写的一篇博客,可供参考:zhangajian.com/post/li-jie-yi-lai-...
3年前 评论
讨论数量: 7

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

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

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

3年前 评论
wanghan

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

3年前 评论

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

3年前 评论

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

3年前 评论

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

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

你首先要明白reflect

3年前 评论

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