我正在学习PHP 5.3中的 namespace ,我想使用 namespace 自动加载。我找到了这个SplClassLoader class,但是我不知道它是如何工作的。

假设我有这样的目录结构:

system
  - framework
    - http
      - request.php
      - response.php
index.php
SplClassLoader.php

如何启用类(class)自动加载功能? request.phpresponse.php应该具有哪些命名空间?

这是request.php:
namespace framework\http;

class Request
{
    public function __construct()
    {
        echo __CLASS__ . " constructer!";
    }
}

这是response.php:
namespace framework\http;

class Request
{
    public function __construct()
    {
        echo __CLASS__ . " constructed!";
    }
}

index.php中,我有:
require_once("SplClassLoader.php");
$loader = new SplClassLoader('framework\http', 'system/framework');
$loader->register();

$r = new Request();

我收到此错误消息:
Fatal error: Class 'Request' not found in C:\wamp\apache\htdocs\php_autoloading\index.php on line 8

为什么这不起作用?如何在项目中使用SplClassLoader以便加载/需要我的类,以及如何设置和命名文件夹及 namespace ?

最佳答案

您的文件名和目录名需要与类和 namespace 的大小写完全匹配,如以下示例所示:

system
  - framework
    - http
      - Request.php
      - Response.php
index.php
SplClassLoader.php

此外,您仅需在注册SplClassLoader对象时声明根 namespace ,如下所示:
<?php

    require_once("SplClassLoader.php");
    $loader = new SplClassLoader('framework', 'system/framework');
    $loader->register();

    use framework\http\Request;

    $r = new Request();

?>

希望这可以帮助!

10-08 12:45
查看更多