Добрый день. Я работаю над примером, чтобы точно понимать, что такое имена, и каковы их ограничения. У меня есть эта структура (окна):Использование пространств имен PHP в подзоне
D:\server\sistemas\tests\phpNS\exec.php
D:\server\sistemas\tests\phpNS\Extra\Call.php
D:\server\sistemas\tests\phpNS\Extra\exec.php --> (copy of the other one)
D:\server\sistemas\tests\phpNS\Lib\Base.php
код для каждого один:
exec.php<?php
spl_autoload_register();
$a = new Extra\Call();
?>
Call.php
<?php
namespace Extra{
spl_autoload_register();
class Call{
public function __construct(){
$inst = new \Libs\Base();
var_dump($inst);
}
}
}
?>
Base.php
<?php
namespace Libs{
class Base{
public $dac;
public $doc;
public function __construct(){
}
}
}
?>
Если я работаю по этому сценарию, все в порядке. Проблема заключается в том, когда я исполняю EXTRA \ exec.php
Extra \ exec.php
<?php
namespace Extra{
spl_autoload_register();
$a = new Call();
}
?>
Это, как предполагается, что контекст файловой системы этого файла Extra так, поэтому я использую это пространство имен, но не за работой. Я получил эту ошибку.
Fatal error: spl_autoload(): Class Extra\Call could not be loaded in D:\server\sistemas\tests\phpNS\Extra\exec.php on line 5
Тогда я помню классы PHP называются по обратной косой черты (\ итератора), так что я попробовал это тоже:
Extra \ exec.php
<?php
spl_autoload_register();
$a = new \Extra\Call();
?>
Но я получил тот же результат ... Что я делаю неправильно, и что мне делать, если я хочу использовать этот файл в этом или в любом каталоге n-depth?
Помогла бы вам использовать один из компонентов «автозагрузчика»? например [Загрузчик классов PSR-4] (http://symfony.com/doc/current/components/class_loader/psr4_class_loader.html). Также: [Aura.Autoload: предоставляет полный PSR-4 и ограниченный автозагрузчик PSR-0] (https://github.com/auraphp/Aura.Autoload/tree/2.x). Оба упрощают управление «автозагрузкой» классов. Я использовал оба и в настоящее время использую 'Aura'. –
Хм кажется, что он может работать. Но это означает, что мне нужно использовать symfony, чтобы получить это право? Я просто убеждаюсь, что могу использовать пространства имен на любом уровне n-depth-каталога, потому что, если мне нужно использовать функцию перезаписи htaccess из пустого index.php, и с этой проблемой я не могу перенаправить файл в структура проекта без получения ошибки загрузки класса. – Artynok
Мне жаль, Райан, может быть, я что-то делаю неправильно. Я переписал свой код на exec.php (этот хороший) \t $ dir = _DIR_ _. "/ Libs/Aura.Autoload-2.x/src/Loader.php"; \t require_once ($ dir); \t $ loader = new \ Aura \ Autoload \ Loader; \t $ loader-> register(); \t $ loader-> addPrefix ('Extra \ Call', '\ Extra \ Call.php'); \t $ a = new Extra \ Call(); Я следил за инструкциями и загружал Ауру, или, по крайней мере, я думаю, что загружается, но не загружает мой класс. Можете ли вы помочь мне с этим, пожалуйста? – Artynok