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/"}
}
}