PHP自动加载SplClassLoader?

前端之家收集整理的这篇文章主要介绍了PHP自动加载SplClassLoader?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在学习 PHP 5.3中的命名空间,我想使用命名空间自动加载.我发现这个 SplClassLoader class,但我不知道它是如何工作的.

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

  1. system
  2. - framework
  3. - http
  4. - request.PHP
  5. - response.PHP
  6. index.PHP
  7. SplClassLoader.PHP

如何启用类自动加载? request.PHP和response.PHP有什么命名空间?

这是request.PHP

  1. namespace framework\http;
  2.  
  3. class Request
  4. {
  5. public function __construct()
  6. {
  7. echo __CLASS__ . " constructer!";
  8. }
  9. }

这是response.PHP

  1. namespace framework\http;
  2.  
  3. class Request
  4. {
  5. public function __construct()
  6. {
  7. echo __CLASS__ . " constructed!";
  8. }
  9. }

在index.PHP我有:

  1. require_once("SplClassLoader.PHP");
  2. $loader = new SplClassLoader('framework\http','system/framework');
  3. $loader->register();
  4.  
  5. $r = new Request();

我收到这个错误消息:

  1. Fatal error: Class 'Request' not found in C:\wamp\apache\htdocs\PHP_autoloading\index.PHP on line 8

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

您的文件和目录名称需要与您的类和命名空间的情况完全匹配,如以下示例所示:
  1. system
  2. - framework
  3. - http
  4. - Request.PHP
  5. - Response.PHP
  6. index.PHP
  7. SplClassLoader.PHP

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

  1. <?PHP
  2.  
  3. require_once("SplClassLoader.PHP");
  4. $loader = new SplClassLoader('framework','system/framework');
  5. $loader->register();
  6.  
  7. use framework\http\Request;
  8.  
  9. $r = new Request();
  10.  
  11. ?>

希望这可以帮助!

猜你在找的PHP相关文章