使用SplClassLoader的PHP自动加载



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

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

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

如何启用类自动加载?request.phpresponse.php应该具有哪些名称空间?

这是request.php:

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

这就是response.php:

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

index.php中,我有:

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

我收到这个错误消息:

Fatal error: Class 'Request' not found in C:wampapachehtdocsphp_autoloadingindex.php on line 8

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

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

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

此外,您只需要在注册SplClassLoader对象时声明根命名空间,如下所示:

<?php
    require_once("SplClassLoader.php");
    $loader = new SplClassLoader('framework', 'system/framework');
    $loader->register();
    use frameworkhttpRequest;
    $r = new Request();
?>

希望这能有所帮助!

相关内容

  • 没有找到相关文章

最新更新