php 构造函数的使用

天黑
  • 6
<?php

namespace app\api\controller\f;
use app\api\model\ModelStackBook;

class IndexDemo extends Demo
{
    protected $ModelStackBook;

    public function __construct()
    {
        parent::__construct();
        $this->ModelStackBook = new ModelStackBook();
    }

    public function index()
    {
        $res = $this->ModelStackBook->find(1);
        return api_success($res);
    }

    public function index1()
    {
        $res = $this->ModelStackBook->find(1);
        return api_success($res);
    }
}
<?php

namespace app\api\controller\f;
use app\api\model\ModelStackBook;

class IndexDemo extends Demo
{
    
    public function index()
    {
        $ModelStackBook = new ModelStackBook();
        $res = $ModelStackBook->find(1);
        return api_success($res);
    }

    public function index1()
    {
        $ModelStackBook = new ModelStackBook();
        $res = $ModelStackBook->find(1);
        return api_success($res);
    }
}

在项目中会用到 控制器 ModelStackBook 每次都去new 一遍, 还是直接使用构造函数。两者的差别在哪里?从代码量上看,如果多次调用的话 使用构造函数,代码更加简洁,易维护。其他深层次的方面,会有区别吗?

回复
阅读 1.4k
2 个回答

可继承性吧,构造函数中会直接被调用。在其他PHP中可以直接使用的话,更方便。
我感觉应该是这样的吧。

都不是很好,如果非要选的话,第一种相对要好点儿,因为如果你以后有变更的话,只用修改构造函数处就好了,但是如果你用了依赖注入容器的话,就可以先定义接口再实现,然后在容器上绑定类到接口,这样,你只需要修改容器绑定就好了,代码可以不用动。

// 定义一个接口,模型实现接口,然后在容器上绑定 ,如果以后会有变动,就可以只是变这里的绑定
$app->bind('ModelStackBookInterface', new ModelStackBook());
// 上一行代码不在这个文件中,在容器注册位置,不同框架注入的位置不一样。
// 在构造方法中注入接口
public function __construct(ModelStackBookInterface $modelStackBook)
{
    parent::__construct();
    $this->ModelStackBook = $modelStackBook;
}

当然,如果你觉得太麻烦,也可以直接不绑定 直接使用模型类型注入。

// 在构造方法中注入
public function __construct(ModelStackBook $modelStackBook)
{
    parent::__construct();
    $this->ModelStackBook = $modelStackBook;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏