Я изучаю пространства имен в PHP 5.3, и я хотел бы использовать автозагрузку пространств имен. Я нашел этот класс SplClassLoader , но не могу понять, как он работает.
Предположим, что у меня есть структура каталогов:
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
в моих проектах, чтобы он 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(); ?>
Надеюсь это поможет!