常用底层知识 - 创建一个类

  • 作者: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 $logFilepublic $maxFileSize并没有默认值

我相信其实你已经大概可以想像得到Yii::createObject的实现原理了


思考

打开@app/config/db.php看看它的内容,能想像到Yii打算拿这个数组干什么吗?

其实你可以想像成这样:一切配置的底层都是靠Yii::createObject来new相关组件的,包括你未来自己扩展的配置

后面再说,很快就到配置了