yii2的自动加载类文件

第一次原创写文章哎:哄哄

一。查看了一下Yii2的加载原理:

    每个命名空间都有对应的路径(然后文件名一定要与类名相同)。通过Yii::$classMap可设定。或别名也可识别。

    当我要用一个不认识的类名时,会自动调用魔术方法Yii类下的spl_autoload_register,然后执行autoload方法,在这个方法里会把对应的类文件包含进来。

 spl_autoload_register(['Yii', 'autoload'], true, true);

//这个是自动加载的方法

public static function autoload($className)
{

    //$className=frontend\models\ImportBomForm
    //$classMap['frontend\models']='E:/phpstudy/WWW/zcplm/frontend/models'
    //然后会把ImportBomForm文件包含进去。

    if (isset(static::$classMap[$className])) {//有对应的映射
        $classFile = static::$classMap[$className];
        if ($classFile[0] === '@') {
            $classFile = static::getAlias($classFile);
        }
    } elseif (strpos($className, '\\') !== false) {//有对应别名的
        $classFile = static::getAlias('@' . str_replace('\\', '/', $className) . '.php', false);
        if ($classFile === false || !is_file($classFile)) {
            return;
        }
    } else {
        return;
    }

    include($classFile);

    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?");
    }
}





二。说一下phpexcel的自动加载

    当你包含PHPExcel文件时

  require_once (Yii::getAlias("@common")."/components/phpexcel/PHPExcel/Reader/PHPExcel.php");
    PHPExcel.php文件的开会有以下,然后去执行他的自动加载。

/** PHPExcel root directory */
if (!defined('PHPEXCEL_ROOT')) {
    define('PHPEXCEL_ROOT', dirname(__FILE__) . '/');
    require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
}
    Autoloader.php会把一些不认识类在自己的包里找一下,如果找到就包含进去。











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值