Автоматическая загрузка 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();

?>

надеюсь, что это помогает!