常用底层知识 - 创建一个类 ¶
作者:KK
发表日期:2016.12.8
平时实例化一个类都是new ClassName()
这样的语法
但是Yii类提供了一个createObject
的静态方法来创建类,比如:
$target = Yii::createObject('yii\log\FileTarget');
echo get_class($target); // yii\log\FileTarget
var_dump($target); // object ……
这跟new \yii\log\FileTarget()
有什么两样吗?是的,没两样!继续下面才是重点
通过配置来创建类 ¶
再来
$config = [
'class' => 'yii\log\FileTarget',
'logFile' => 'D:/a.log',
'maxFileSize' => 3306,
];
$target = Yii::createObject($config);
echo $target->logFile; // D:/a.log
echo $target->maxFileSize; //3306
一眼就明白,config里的class就是要创建的类,$config['logFile']是控制了类的logFile属性,maxFileSize也是这个道理
你可以看看@vendor/yiisoft/yii2/log/FileTarget.php
里,public $logFile
和public $maxFileSize
并没有默认值
我相信其实你已经大概可以想像得到Yii::createObject的实现原理了
思考 ¶
打开@app/config/db.php看看它的内容,能想像到Yii打算拿这个数组干什么吗?
其实你可以想像成这样:一切配置的底层都是靠Yii::createObject来new相关组件的,包括你未来自己扩展的配置
后面再说,很快就到配置了