这几天在看php自动加载相关知识,这里记录一下。
use 命名空间只是防止命名空间的冲突,使用时仍需引入,这一步由自动加载来做。
与psr0不同,psr4不再转换 '_' 为文件分隔符,且 psr4有前缀gainia
以tp5的自动加载为例 Loader.php -> autoload() -> findFile()
/**
* 查找文件
* @param $class
* @return bool
*/
private static function findFile($class)
{
//以$class == 'think\Route' 为例
if (!empty(self::$map[$class])) {
// 类库映射
return self::$map[$class];
}
// 查找 PSR-4
$logicalPathPsr4 = strtr($class, '\\', DS) . EXT;//替换文件分隔符和后缀名
$first = $class[0];// $first = 't'
if (isset(self::$prefixLengthsPsr4[$first])) {//$prefixLengthsPsr4 为二维数组,第一维以class首字母区分,第二维以t*前缀区分
foreach (self::$prefixLengthsPsr4[$first] as $prefix => $length) {//遍历t*前缀
if (0 === strpos($class, $prefix)) {//找到存在于$c