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