php - 关于一个简单的 PHP Autoloader 的问题

标签 php namespaces autoload

我刚开始学习 PHP 命名空间并开始创建一个简单的自动加载函数。 O 所做的是:

function __autoload($name) {
  echo $name . "<br />";
  require_once $name . ".php";
}

因此,如果我不使用任何别名或导入语句(例如,这会起作用)。 使用 MainNamespace\Subnamespace 因为如果我这样做,假设我有:

\GreatApp\Models\User.php
\GreatApp\Models\Project.php
\GreatApp\Util\Util.php
\GreatApp\Util\Test\Test.php

如果我尝试这样做:

new GreatApp\Models\User();

之所以有效,是因为自动加载中的 $name 将变为 GreatApp\Models\User,因此可以找到 GreatApp\Models\User.php。但是当我这样做时:

use GreatApp\Models;
new User();

它失败了,因为现在 $name 只是 UserUser.php 将找不到。那我应该如何设置自动加载呢?

最佳答案

无论您如何导入命名空间和引用类,完整的命名空间路径总是传递给自动加载器。它应该有效。

只有 __autoload 函数本身应该属于主(根)命名空间

关于php - 关于一个简单的 PHP Autoloader 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3318466/

相关文章:

php - 如何在标题中允许图标?

namespaces - clojure 关键字什么时候应该出现在命名空间中?

php - 使用 Composer 安装的库,找不到类错误

php - 在 Laravel 中过滤多态关系

PHP:像 Xdebug 一样打印捕获异常

php - 如何在 Laravel 中使用 Codeception 设置用于测试的 DB 对象

ruby-on-rails - 为什么 Rails 不从应用程序/服务自动加载类?

php - 如何使用 spl_autoload 自动在所有命名空间中使用根类?

php - AJAX 第二次请求和 IE6

kubernetes - 命名空间 "stuck"作为终止,我如何删除它