微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP自动加载SplClassLoader?

我正在学习 PHP 5.3中的命名空间,我想使用命名空间自动加载.我发现这个 SplClassLoader class,但我不知道它是如何工作的.

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

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

如何启用类自动加载? request.PHP和response.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,以便加载/需要我的类,以及如何设置和命名文件夹和命名空间?

您的文件和目录名称需要与您的类和命名空间的情况完全匹配,如以下示例所示:
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 framework\http\Request;

    $r = new Request();

?>

希望这可以帮助!

原文地址:https://www.jb51.cc/php/139591.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐