团队使用的开发框架现在已经基于composer,并使用composer的classloader来进行文件的自动加载,但composer生成后的loader是需要在php 5.3以上才能运行。

为了加大框架的适应性,并可以不改变composer ClassLoader 的使用方式。修改了一下composer 的ClassLoader,适用于 php 5.2.x。

在调用 /vendor/autoload.php 的时候判断一下php版本,载入不同的autoload.php,编写自己的autoload.php进行 /vendor/composer/autoload_namespaces.php, /vendor/composer/autoload_classmap.php 两个文件的载入并返回修改过的loader对象。

下面是代码:


$loader = new ClassLoader();

$map = require LIB_PATH . '/vendor/composer/autoload_namespaces.php';
foreach ($map as $namespace => $path) {
    $loader->add($namespace, $path);
}

$classMap = require LIB_PATH . '/vendor/composer/autoload_classmap.php';
if ($classMap) {
    $loader->addClassMap($classMap);
}

$loader->register(true);

return $loader;

ClassLoader.php - https://gist.github.com/xuanyan/5450446