Yii2中YiiBase自动加载类、引用文件方法分析(autoload)


Posted in PHP onJuly 25, 2016

本文实例分析了Yii2中YiiBase自动加载类、引用文件的方法。分享给大家供大家参考,具体如下:

在Yii2中这个函数是用来加载类的,没有直接引用文件的相关实现。但是这个也可以用来引用文件。

public static function autoload($className)
{
   /*
    * $classMap是一个name-value数组,
    * name为类的名称,
    * value为这个类的文件路径,其中路径可包含别名
    *
    * 首先在$classMap中查找是否设置了类别名路径
    */
  if (isset(static::$classMap[$className])) {
   $classFile = static::$classMap[$className];
   //如果路径是别名,获取别名路径
   if ($classFile[0] === '@') {
    $classFile = static::getAlias($classFile);
   }
  //如果$className以"\"开头,如:'\a\b\MyClass'
  //则会生成别名 '@a/b/MyClass.php',然后获取对应的别名路径。
  } elseif (strpos($className, '\\') !== false) {
   $classFile = static::getAlias('@' . str_replace('\\', '/', $className) . '.php', false);
   if ($classFile === false || !is_file($classFile)) {
    return;
   }
  } else {
   return;
  }
  //引用文件
  include($classFile);
  //如果debug,并且类不存在....
  //则异常
  //所以 在关闭debug的情况下 也是可以加载文件的
  if (YII_DEBUG && !class_exists($className, false) && !interface_exists($className, false) && !trait_exists($className, false)) {
   throw new UnknownClassException("Unable to find '$className' in file: $classFile. Namespace missing?");
  }
}

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP删除数组中的特定元素的代码
Jun 28 PHP
PHP中static关键字以及与self关键字的区别
Jul 01 PHP
php获取本机真实IP地址实例代码
Mar 31 PHP
PHP 二级子目录(后台目录)设置二级域名
Mar 02 PHP
PHP 中使用explode()函数切割字符串为数组的示例
May 06 PHP
PHP实现的多维数组去重操作示例
Jul 21 PHP
PHP设计模式之观察者模式定义与用法示例
Aug 04 PHP
php微信公众号开发之关键词回复
Oct 20 PHP
PHP安装memcache扩展的步骤讲解
Feb 14 PHP
php实现网页上一页下一页翻页过程详解
Jun 28 PHP
PHP 对象接口简单实现方法示例
Apr 13 PHP
PHP解密支付宝小程序的加密数据、手机号的示例代码
Feb 26 PHP
PHP中session跨子域的三种实现方法
Jul 25 #PHP
Yii2创建控制器(createController)方法详解
Jul 23 #PHP
Yii2主题(Theme)用法详解
Jul 23 #PHP
Yii2创建表单(ActiveForm)方法详解
Jul 23 #PHP
Yii2验证器(Validator)用法分析
Jul 23 #PHP
yii2 RBAC使用DbManager实现后台权限判断的方法
Jul 23 #PHP
Yii2简单实现多语言配置的方法
Jul 23 #PHP
You might like
DC宇宙的第一个英雄,堪称动漫史鼻祖,如今成为美国文化的象征
2020/04/09 欧美动漫
利用 window_onload 实现select默认选择
2006/10/09 PHP
php处理文件的小例子(解压缩,删除目录)
2013/02/03 PHP
Zend Framework教程之模型Model基本规则和使用方法
2016/03/04 PHP
JavaScript 继承详解(四)
2009/07/13 Javascript
Node.js生成HttpStatusCode辅助类发布到npm
2013/04/09 Javascript
js提交form表单,并传递参数的实现方法
2016/05/25 Javascript
JS中用childNodes获取子元素换行会产生一个子元素
2016/12/08 Javascript
NodeJs的fs读写删除移动监听
2017/04/28 NodeJs
Angular.js中angular-ui-router的简单实践
2017/07/18 Javascript
对于js垃圾回收机制的理解
2017/09/14 Javascript
详细分析JS函数去抖和节流
2017/12/05 Javascript
Vue组件化开发思考
2018/02/02 Javascript
详解使用vue-cli脚手架初始化Vue项目下的项目结构
2018/03/08 Javascript
使用Vue开发动态刷新Echarts组件的教程详解
2018/03/22 Javascript
jQuery实现的鼠标拖动浮层功能示例【拖动div等任何标签】
2018/12/29 jQuery
javascript系统时间设置操作示例
2019/06/17 Javascript
Vue 基于 vuedraggable 实现选中、拖拽、排序效果
2020/05/18 Javascript
利用numpy+matplotlib绘图的基本操作教程
2017/05/03 Python
python使用selenium登录QQ邮箱(附带滑动解锁)
2019/01/23 Python
Python递归函数实例讲解
2019/02/27 Python
Python写出新冠状病毒确诊人数地图的方法
2020/02/12 Python
Python socket处理client连接过程解析
2020/03/18 Python
Python使用plt.boxplot() 参数绘制箱线图
2020/06/04 Python
css3 flex实现div内容水平垂直居中的几种方法
2020/03/27 HTML / CSS
深入探究HTML5的History API
2015/07/09 HTML / CSS
美国一家主打母婴用品的团购网站:zulily
2017/09/19 全球购物
纪伊国屋泰国网上书店:Kinokuniya泰国
2017/12/24 全球购物
文化产业实施方案
2014/06/07 职场文书
2014年体育教师工作总结
2014/12/03 职场文书
活动总结书怎么写
2015/05/11 职场文书
集结号观后感
2015/06/08 职场文书
雷锋电影观后感
2015/06/10 职场文书
初中生入团申请书范文(五篇)
2019/10/16 职场文书
SQL实现LeetCode(196.删除重复邮箱)
2021/08/07 MySQL
Win11 vmware不兼容怎么办?Win11与VMware虚拟机不兼容的解决方法
2023/01/09 数码科技