Я установил простую автозагрузку, чтобы понять принципы при работе вместе с пространствами имен.PHP - пространства имен и проблемы с автозагрузкой
test.php:
namespace House;
function __autoload($classname)
{
$parts = explode('\\', $classname);
$class = 'Room/'.end($parts).'.php';
require_once($class);
}
$Toy = new Toy();
echo $Toy->hello();
номер/Toy.php:
namespace House;
class Toy
{
public function hello() { return "HELLO"; }
}
При объявлении $ Игрушку я получаю Фатальная ошибка: класс 'Дом \ Игрушка' не найден in test.php on line 18
Что я здесь делаю?
При удалении функции __autoload и вместо того, чтобы просто положить в
require_once('Room/Toy.php');
Это работает!
Вы имеете в виду, что __autoload не называется вообще, если пространство имен объявлено перед ним? Я знаю, что структура плохая, это я экспериментирую, чтобы понять пространства имен на самом деле. – DJJQ
Да, я имел в виду это. Он не вызывается, так как он не реализован. Вы только реализовали 'House \ __ autoload()', но PHP будет вызывать '\ __ autoload()', что означает '__autoload()', определяемый в глобальном пространстве имен. Однако вы можете использовать любую функцию из любого пространства имен (и/или класса), которое вы хотите, используя 'spl_autoload_register()'. – hek2mgl
Хорошо, теперь я понял. Спасибо вам за помощь! – DJJQ