哪个是在 Yii2 中初始化组件的更好方法?

Which is better way to initialise Component in Yii2?

我在 Yii2 中创建了一个组件并用 yii\base\Component 扩展了它。

现在,我想初始化我创建的组件,这可以通过两种方式完成

  1. 使用new:

    $sampleClass = new SampleClass();
    
  2. 将组件放入配置文件中:

    'sampleClass' => [
        'class' => 'app\components\SampleClass',
    ], 
    

    并像 Yii::$app->sampleClass 一样访问它。

它们之间有什么区别,哪种初始化组件的方法更好?

这主要取决于您的需要。在配置中定义组件并将其用作 Yii::$app->sampleClass 创建一个实例,可以在配置级别轻松配置并跨项目共享。完美的例子是数据库连接或 URL 管理器——通常你想在多个地方使用这些组件的同一个实例,并且你希望能够轻松地配置它们。在配置中定义它们并使用 Yii::$app->component 是 Yii 中的自然选择(尽管总体上这是不好的做法并且使用 Yii::$app 作为静态服务定位器在大型应用程序中可能会有问题)。

如果您不想共享组件或想直接将其作为依赖项传递,使用 new 关键字或 Yii::createObject() 是更好的选择。