Автоматическая загрузка PHP с помощью SplClassLoader?
Я изучаю пространства имен в PHP 5.3, и я хотел бы использовать автозапуск пространств имен. Я нашел это класс SplClassLoader, но я не могу понять, как это работает.
предположим, у меня есть такая структура каталогов:
system
- framework
- http
- request.php
- response.php
index.php
SplClassLoader.php
Как включить автозагрузку? Какие пространства имен должны request.php
и response.php
есть?
это request.php
:
namespace frameworkhttp;
class Request
{
public function __construct()
{
echo __CLASS__ . " constructer!";
}
}
и это response.php
:
namespace frameworkhttp;
class Request
{
public function __construct()
{
echo __CLASS__ . " constructed!";
}
}
и index.php
Я:
require_once("SplClassLoader.php");
$loader = new SplClassLoader('frameworkhttp', 'system/framework');
$loader->register();
$r = new Request();
Я получаю это сообщение об ошибке:
Fatal error: Class 'Request' not found in C:wampapachehtdocsphp_autoloadingindex.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();
?>
надеюсь, что это помогает!