命名空间和自动加载如何在基于Linux的系统中运行,PHP?

时间:2013-01-19 20:34:17

标签: php autoload autoloader

所以这是我的代码:

<?php

function __autoload($className) {
    $paths = explode(PATH_SEPARATOR, get_include_path());
    $file = $className . '.php';
    foreach ($paths as $path) {
        $combined = $path . DIRECTORY_SEPARATOR . $file;
        if (file_exists($combined)) {
            echo $combined;
            include($combined);
            return;
        }
    }
}

$string = 'Koray';
$string = Framework\StringMethods::_normalize($string);
echo $string;
?>

上述文件名为index.php。 在Framework目录下的文件夹中有一个名为StringMethods.php的文件。

所以我的问题是在这里audoloader autoloads:。\ Framework \ StringMethods.php因为我打电话:

$ string = Framework \ StringMethods。

所以$ file变量实际上是= FrameWork \ StringMethods。而我所做的就是在开头添加.php。\ /开头。

但是Framework \ StringMethods在Linus系统中的表现如何?不是目录分隔符:Linux中的“/”?

所以它会尝试包含:./ Framework \ StringMethods.php

如果正确,如何编码更好?

1 个答案:

答案 0 :(得分:2)

你能试试下面的代码吗?注意文件夹/文件名,因为unix区分大小写。

define('ROOT_PATH', __DIR__ . DIRECTORY_SEPARATOR);

function __autoload($className) {
    $path = str_replace('\\', DIRECTORY_SEPARATOR, $className);
    $file = ROOT_PATH . $path . '.php';
    if (is_file($file)) {
        require_once($file);
    }
}

$string = 'Koray';
$string = \Framework\StringMethods::_normalize($string);
echo $string;