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