我们可以使用class作为依赖注入而不是接口

时间:2015-10-20 13:17:11

标签: php oop dependency-injection

我使用了另一个类作为依赖注入是很好的解决方法,或者我搞砸了OOP方式。

Helper.php

class Helper {

    public function getModulePermission($role_id, $module, $type) {
        // my work code
    }

}

DesignationController.php

use App\Helpers\Helper;

class DesignationController extends Controller {

    protected $designation;
    protected $helper;

    /**
     * @param DesignationContract $designation
     * @param Helper $helper
     */
    public function __construct(DesignationContract $designation, Helper $helper) {
        $this->designation = $designation;
        $this->helper = $helper;
    }

    /**
     * Display a listing of the resource.
     *
     * @return Response
     */
    public function index(Request $request) {
        $permission = $this->helper->getModulePermission($request->id, 'Designation', 'view');      
        if ($permission) {
            return true;
        } else {
            return view('errors.forbidden');
        }
    }

所以我有一个名为Helper的类,可以在每个控制器中访问以检查权限,但我认为我已经搞砸了OOP功能。像它一样工作是好事还是我需要创建一个Interface而不是类

2 个答案:

答案 0 :(得分:0)

  • 这是两个不同的OOP概念。接口强制任何类实现它来实现接口中声明的函数(称为函数签名)。因此,对于多个类实现相同的接口,最终会有多个类实现相同的函数集(它们是否是相同的函数体)。
  • 在某些情况下,第二个概念称为依赖注入或控制反转。你通过类构造函数或通过setter注入一个类,然后调用注入类提供的某些函数。在这里,您将拥有由多个类调用的相同函数,通过使用公共(注入)类,更容易的单元测试(您可以轻松地模拟对象),更模块化的代码(如果您想要不同,可以注入不同的类)功能)。

所以目前的情况已经足够好了,但这完全取决于你想要做的事情。

答案 1 :(得分:0)

我不喜欢这个名字,它对我没有任何意义,或者让我知道这个课程可以帮助我获得模块的权限。此外,使用这样的名称,可以简单地使用另一种方法,比如让我们说Helper::login($id)或者命名它,这将立即违反单一责任原则(无论如何,laravel控制器都会这样做)。

注入相对比较好,也许中间件类可能是更好的选择。