yii2框架源码分析系列(2)之creatObject [ 2.0 版本 ]
回顾
上篇简单分析了下yii2的入口,在入口流程中include了BaseYii这个包含了全局产量定义和公用功能方法的文件,今天继续看下yii2是如何调用Yii::createObject
来创建对象的。
创建对象
Yii::createObject
是new的加强版本,可以通过类名、配置数组或匿名方法来创建对象,看一下Yii::createObject
的源码
// 主要是通过container容器来代理创建
public static function createObject($type, array $params = [])
{
// 传入类名方式进行创建
if (is_string($type)) {
return static::$container->get($type, $params);
} elseif (is_array($type) && isset($type['class'])) {
// 传入数组方式进行创建,这里需要注意如果是数组方式,需要指定$type['class']来表示类名
$class = $type['class'];
unset($type['class']);
return static::$container->get($class, $params, $type);
} elseif (is_callable($type, true)) {
// 传入匿名方法进行创建
return static::$container->invoke($type, $params);
} elseif (is_array($type)) {
// 非法抛出未指定类名异常
throw new InvalidConfigException('Object configuration must be an array containing a "class" element.');
}
// 非法抛出使用非支持的方式创建对象异常
throw new InvalidConfigException('Unsupported configuration type: ' . gettype($type));
}
从上面代码可以看到,Yii::createObject()
主要是通过调用container的get()
和invoke()
来创建对象实例的,下篇将着重介绍下Yii的container容器是如何工作的
棂壹
注册时间:2016-05-03
最后登录:2019-06-04
在线时长:6小时43分
最后登录:2019-06-04
在线时长:6小时43分
- 粉丝47
- 金钱90
- 威望80
- 积分950
热门源码
- 基于 Yii 2 + Bootstrap 3 搭建一套后台管理系统 CMF
- 整合完 yii2-rbac+yii2-admin+adminlte 等库的基础开发后台源码
- 适合初学者学习的一款通用的管理后台
- yii-goaop - 将 goaop 集成到 Yii,在 Yii 中优雅的面向切面编程
- yii-log-target - 监控系统异常且多渠道发送异常信息通知
- 店滴云1.3.0
- 面向对象的一小步:添加 ActiveRecord 的 Scope 功能
- Yii2 开源商城 FecShop
- 基于 Yii2 开发的多店铺商城系统,免费开源 + 适合二开
- leadshop - 基于 Yii2 开发的一款免费开源且支持商业使用的商城管理系统
共 1 条评论
分析的很好,受教了,赞一个