名称空间和自动加载在基于Linux的系统PHP中是如何工作的?

名称空间和自动加载在基于Linux的系统PHP中是如何工作的?,php,autoload,autoloader,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_e

这是我的代码:

<?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。 框架目录下的文件夹中有一个名为StringMethods.php的文件

所以我的问题是这里的audoloader autoloads:。\Framework\StringMethods.php,因为我调用:

$string=Framework\StringMethods

所以$file变量实际上是=FrameWork\StringMethods。我要做的是在末尾添加.php,在开头添加一个

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

因此,它将尝试包括:./Framework\StringMethods.php


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

你能试试下面的代码吗?注意文件夹/文件名,因为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;

谢谢,我想这会有用的。我真的没有Linux系统,我只是好奇而已。但是用目录分隔符替换“\”是一个非常好的主意。谢谢。建议:所有文件夹/文件都以小写形式保存在磁盘上(例如:frame\u work/string\u method.php)。autoloader应该将CamelCase转换成这种格式(框架>框架,StringMethod>字符串方法。谢谢你,正如我说的我是新来的。这不是
必须的
,而是
一个建议
;-)欢迎使用
PHP
。PHP中的\名称空间分隔符与Windows系统中的\目录分隔符相同,这让人感到困惑;但是这两个不一样,不应该像使用这两个一样使用synonymous@MarkBaker你能建议一个更好的方法吗?(我不是在讽刺什么,只是想学习。)应该怎么做?始终使用unix/目录分隔符(它可以在PHP中的所有平台上工作)或内置的目录分隔符常量;并且仅将\用于名称空间。。。。并希望使用符合psr-0标准的自动加载器,例如自动加载器