我正在学习
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(); ?>
希望这可以帮助!