spl_autoload没有加载(区分大小写?)

时间:2012-12-31 03:35:01

标签: php zend-framework2 spl-autoload-register

我正在使用ZF2作为库。我有一个非常标准的spl_autoload_register实现,如下所示:

set_include_path(join(PATH_SEPARATOR, array(
    get_include_path(),
    ROOT . DS . 'library',
    ROOT . DS . 'application',
)));

spl_autoload_register();

其中:

define('DS', DIRECTORY_SEPARATOR);
define('ROOT', dirname(dirname(__FILE__)));

在我的Mac上,一切正常。在我的CentOS服务器上,不。我唯一一次看到像spl_autoload_register这样的问题不喜欢的东西就是我试图使用CamelCasing等时。显然,事实并非如此。我正在尝试加载:

\Zend\Config\Config

现在,我的目录结构如下所示:

/application
    /controller
    /model
       /objects
       /dao
       /weeeeeeee 
    /view
      /template_html
/library
    /core
    /Zend
      /Config

你明白了。

那么,为什么这不起作用?

编辑:请告诉它不是在寻找config.php而不是Config.php ......

1 个答案:

答案 0 :(得分:2)

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

解决方案:

  1. 将所有包含的类重命名为小写,包括所有包含路径
  2. 编写一个更好的自动加载器来处理混合大小写路径
  3. 使用Composer的自动加载器。
  4. 重命名一切都是不现实和愚蠢的,我不想再次重新发明轮子,但我很幸运能够使用Composer的自动加载器加载自定义库。

    Composer autoload reference

    Composer有一个ZF2 package,但你可以通过在composer.json文件中添加自动加载定义来手动加载你的作品:

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