我试图在PHP中自动加载存储在classes文件夹中的子文件夹中的类。这是目录和文件结构:
htdocs
SANDBOX
index.php
classes
app
app1.php
utlity
utility1.php
以下是index.php的内容:
<!DOCTYPE HTML>
<html>
<?php
//autoload classes
# first attempt
spl_autoload_register(function($class) {
require_once 'classes/' . $class . '.php';
});
# second attempt
// spl_autoload_extensions(".php");
// spl_autoload_register();
//render stuff in browser
echo '<p>this is the test page</p><br>';
echo Utility1::greeting();
echo App1::greeting();
?>
</html>
以下是app1.php的内容:
<?php
namespace classes/app;
class App1
{
public static function greeting()
{
return 'app<br>';
}
}
?>
以下是utility1.php的内容:
<?php
namespace classes/utility;
class Utility1
{
public static function greeting()
{
return 'utility<br>';
}
}
?>
在index.php中尝试1和尝试2都没有导致类的成功自动加载。需要进行哪些修改才能使自动加载与此文件结构一起使用?理想的自动加载方法将允许将来将其他子文件夹添加到classes文件夹中,而不需要修改自动加载代码。
答案 0 :(得分:0)
您的类位于命名空间中,您需要在代码中访问它们时提供正确的命名空间:
echo \classes\utility\Utility1::greeting();
echo \classes\app\App1::greeting();
除此之外,您的自动加载器基本上看起来很好。您应该将参数转换为小写(或者在正确的情况下将文件命名),然后将\
替换为/
(对于完整的操作系统互操作性。