哪个是在 Yii2 中初始化组件的更好方法?
Which is better way to initialise Component in Yii2?
我在 Yii2 中创建了一个组件并用 yii\base\Component
扩展了它。
现在,我想初始化我创建的组件,这可以通过两种方式完成
使用new
:
$sampleClass = new SampleClass();
将组件放入配置文件中:
'sampleClass' => [
'class' => 'app\components\SampleClass',
],
并像 Yii::$app->sampleClass
一样访问它。
它们之间有什么区别,哪种初始化组件的方法更好?
这主要取决于您的需要。在配置中定义组件并将其用作 Yii::$app->sampleClass
创建一个实例,可以在配置级别轻松配置并跨项目共享。完美的例子是数据库连接或 URL 管理器——通常你想在多个地方使用这些组件的同一个实例,并且你希望能够轻松地配置它们。在配置中定义它们并使用 Yii::$app->component
是 Yii 中的自然选择(尽管总体上这是不好的做法并且使用 Yii::$app
作为静态服务定位器在大型应用程序中可能会有问题)。
如果您不想共享组件或想直接将其作为依赖项传递,使用 new
关键字或 Yii::createObject()
是更好的选择。
我在 Yii2 中创建了一个组件并用 yii\base\Component
扩展了它。
现在,我想初始化我创建的组件,这可以通过两种方式完成
使用
new
:$sampleClass = new SampleClass();
将组件放入配置文件中:
'sampleClass' => [ 'class' => 'app\components\SampleClass', ],
并像
Yii::$app->sampleClass
一样访问它。
它们之间有什么区别,哪种初始化组件的方法更好?
这主要取决于您的需要。在配置中定义组件并将其用作 Yii::$app->sampleClass
创建一个实例,可以在配置级别轻松配置并跨项目共享。完美的例子是数据库连接或 URL 管理器——通常你想在多个地方使用这些组件的同一个实例,并且你希望能够轻松地配置它们。在配置中定义它们并使用 Yii::$app->component
是 Yii 中的自然选择(尽管总体上这是不好的做法并且使用 Yii::$app
作为静态服务定位器在大型应用程序中可能会有问题)。
如果您不想共享组件或想直接将其作为依赖项传递,使用 new
关键字或 Yii::createObject()
是更好的选择。