【问题标题】:How to autoload classes located in subfolders?如何自动加载位于子文件夹中的类?
【发布时间】:2014-03-17 01:01:11
【问题描述】:

我正在尝试在 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 均未成功自动加载类。需要进行哪些修改才能使自动加载与此文件结构一起使用?理想的自动加载方法将允许将来将额外的子文件夹添加到类文件夹中,并且不需要修改自动加载代码。

【问题讨论】:

    标签: php namespaces autoloader


    【解决方案1】:

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

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

    除此之外,您的自动加载器基本上看起来还不错。您应该将参数转换为小写(或以正确的大小写命名文件)并将\ 替换为/(以实现完整的操作系统互操作性。

    【讨论】:

    • 您介意澄清几点吗? 1)你指的是什么参数? 2) 应该如何以及在哪里用正斜杠替换反斜杠?
    • @knot22 好的,请继续。
    猜你喜欢
    • 1970-01-01
    • 2016-09-22
    • 1970-01-01
    • 2014-01-12
    • 2019-10-20
    • 1970-01-01
    • 2011-07-13
    • 2019-12-03
    • 1970-01-01
    相关资源
    最近更新 更多