名称空间和自动加载在基于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标准的自动加载器,例如自动加载器