如何自动加载位于子文件夹中的类?

时间:2014-03-17 01:01:11

标签: php namespaces autoloader

我试图在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文件夹中,而不需要修改自动加载代码。

1 个答案:

答案 0 :(得分:0)

您的类位于命名空间中,您需要在代码中访问它们时提供正确的命名空间:

echo \classes\utility\Utility1::greeting();
echo \classes\app\App1::greeting();

除此之外,您的自动加载器基本上看起来很好。您应该将参数转换为小写(或者在正确的情况下将文件命名),然后将\替换为/(对于完整的操作系统互操作性。