当前位置: 网站首页 - 北京网站建设

spl_autoload只加载小写名字路径的类

admin 2022-03-09

问题
spl_autoload_register extentds无法自动加载父类
Class could not be loaded php
原因
spl_autoload只加载小写名字路径的类 windows 大小写不分,所以本地测试没有问题。linux下就会出错
spl_autoload_extensions(".php,.inc");
#echo spl_autoload_extensions();


spl_autoload是区分大小写的。所有类都映射到小写的文件名。是的,这是疯了。谷歌的PHP错误#49625和#48129的一些背景故事。

解决方案:

重命名包含的所有类为小写,包括所有含路径
写一个更好的自动加载,处理大小写混合的路径

function jb_autoload($className) {
$paths=explode(PATH_SEPARATOR,get_include_path());
$suffixs=explode(',',spl_autoload_extensions());
foreach($paths as $path)
{
foreach($suffixs as $s)
{
$filePath = $path. DIRECTORY_SEPARATOR ."{$className}{$s}"; 
if (is_readable($filePath)) { 
require_once($filePath); 

}
}
}
使用作曲家的自动加载。
重命名所有内容都是不现实和愚蠢的,我不想重新发明轮子,但我很幸运地使用Composer的自动加载器加载自定义库。

Composer autoload reference

作曲家有ZF2 package,但你可以手动通过添加一个自动加载定义您的composer.json文件加载你:


    "autoload": { 
     "psr-0": {"Zend": "library/"} 
    }