PHP:在项目中到处访问类的最佳实践?

时间:2018-08-01 04:42:39

标签: php

我自学且不确定如何执行此操作,需要在任何地方访问我的config类的单个实例。可以使用DIC注入到任何地方,但我希望它可以动态工作。

我可以将类设为静态,但这是答案吗?即使在这里,DIC也可能毫无用处。如果有人可以在这里给我一些建议,我将非常感激。寻找一种干净的方式,而不是肮脏。

这是我当前用于注入控制器(例如模板)的设置。

$controllerRule = [
    "constructParams" => [$dice->create("App\Providers\Template")],    
    "shared" => true,
];

$dice->addRule("App\Controllers\Frontend\LandingController", $controllerRule);

这是我当前使用DIC创建Config实例的方式。

$configRule = [
    "constructParams" => ["example"],
    "shared" => true,
];

$dice->addRule("App\Providers\Configuration", $configRule);

1 个答案:

答案 0 :(得分:0)

最佳做法? 不要

问一下自己:需要Config实例的类是否需要访问所有配置选项?

代替:

class HomeController {

    private $numberOfItemsShown;

    public function __construct(Config $config) {
        $this->numberOfItemsShown = $config->get('homepage.number_of_items');
    }

}

执行以下操作:

class HomeController {

    private $numberOfItemsShown;

    public function __construct(int $numberOfItemsShown) {
        $this->numberOfItemsShown = $numberOfItemsShown;
    }

}

如果一个类需要许多构造函数参数,则有两种选择。

  • 传递关联数组(“选项”数组)
  • 将课程分为几个部分
  • 如果参数具有共同概念,请创建一个新类(例如,代替以“ userPassword”,“ userName”,“ userEmail”的形式传递以其他属性为属性的User类)

一般的经验法则是,类应询问以获取其配置,而不是检索它。