yii2的自动加载类文件
第一次原创写文章哎:哄哄
一。查看了一下Yii2的加载原理:
每个命名空间都有对应的路径(然后文件名一定要与类名相同)。通过Yii::$classMap可设定。或别名也可识别。
当我要用一个不认识的类名时,会自动调用魔术方法Yii类下的spl_autoload_register,然后执行autoload方法,在这个方法里会把对应的类文件包含进来。
spl_autoload_register(["Yii", "autoload"], true, true);
//这个是自动加载的方法
public static function autoload($className)
{
//$className=frontendmodelsImportBomForm
//$classMap["frontendmodels"]="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会把一些不认识类在自己的包里找一下,如果找到就包含进去。声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇:没有了
- 下一篇:没有了
