您现在的位置是:首页 > PHP框架交流PHP框架交流

理解yii自动加载机制 yi框架自动加载

上善若水2022-01-06 12:17:14【PHP框架交流】 1919人已围观

简介理解yii自动加载机制,yii入口文件有引入两个自动加载,一个是composer自带的,一个是yii框架的自动加载文件,很多时候正是yii的自动加载机制才可以顺利将文件引入.来分析下yii自动加载.

理解yii自动加载机制,yii入口文件有引入两个自动加载,一个是composer自带的,一个是yii框架的自动加载文件,很多时候正是yii的自动加载机制才可以顺利将文件引入.来分析下yii自动加载.

1. 首先分析yii web下的入口文件
// comment out the following two lines when deployed to production
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');
require __DIR__ . '/../vendor/autoload.php';
require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
$config = require __DIR__ . '/../config/web.php';
(new yii\web\Application($config))->run();

yii引入了composer的自动加载文件,其次引入的自己的加载文件,这个文件超级重要.
然后就新建了一个Application 这个app会被设置进去我们常使用的Yii::$app中;

在测试类自动加载中 我尝试再注释Application发现.

new app\controllers\CController();//报错 报类无法找到
(new yii\web\Application($config))->run();
new app\controllers\CController();//报错 可以正确加载此类

在想Application也对加载也做了特殊处理吗,Yii.php加载居然不能自动引入这个类.

继续往下看,Application会走Yii.php autoload方法,而yii\web\Application是有预定义到Yii::$classMap中就能顺利找到Application,然后Application构造器会将config的一些配置配置进Application,其中就包括将config数组的中basePath路径地址当做别名赋值到@app,而再未进行实例话Application时类无法找到,而实例化或@app是有值了,可以顺利找到地址,拼接出真实路径,然后include,所以又能正确引入了.

参照yii自动加载写了个简单的demo,有需要的可以产考 https://gitee.com/fierykylin/yi/tree/v1.0.0

Tags: yii

很赞哦! (0)

相关文章

文章评论

站点信息

  • 建站时间:2019-10-24
  • 网站程序:Thinkphp6 Layui
  • 文章统计247篇文章
  • 标签管理标签云
  • 统计数据cnzz统计
  • 微信公众号:扫描二维码,关注我们