1

使用来自您正在使用的框架的常量。即,ABSPATH在 WordPress 中。

如果我不将该常量的值作为依赖项添加到constructor类的函数中,并且直接在方法内部使用它,它将破坏依赖注入原则有多严重?

说,严格来说,您需要执行以下操作:

class Foo {

    private $abspath;

    public function __construct(string $abspath) {
         $this->abspath = $abspath
    }

    public function get_assets_dir() {
        return $this->abspath . '/assets/';
    }

}

$foo = new Foo(ABSPATH);
$foo->get_assets_dir();

而是类似的东西?

class Foo {

    public function __construct() {
         //nothing here.
    }

    public function get_assets_dir() {
        return ABSPATH . '/assets/';
    }

}

如果它总是被定义,因为它位于默认定义它的框架之上,我真的还需要这样做吗?

4

1 回答 1

0

严格来说,是的。(虽然它被称为“依赖倒置原则”,而不是“依赖注入”原则。“依赖注入模式”是“控制倒置”原则的子模式;相关但不相同。在此处阅读更多信息。

ABSPATH是您的Foo类的依赖项,它由应用程序的不同部分在外部定义。如果您的类需要该值,并且旨在与“框架”完全解耦,则应该注入它(忽略该常量属于全局状态,如果您真的在封装您的类,则不需要知道其中)。

实际上,如果您的课程仅用于 Wordpress(看起来就是这样),我不会太担心。无论如何,您已经与您的“框架”耦合。

于 2019-08-10T16:25:12.200 回答