Я новичок в этой области пространства имен.PHP-класс не найден при использовании пространства имен
У меня есть 2 класса (отдельные файлы) в моей базовой директории, скажем class1.php
и class2.php
внутри каталога src/
.
class1.php
namespace \src\utility\Timer;
class Timer{
public static function somefunction(){
}
}
class2.php
namespace \src\utility\Verification;
use Timer;
class Verification{
Timer::somefunction();
}
Когда я исполняю class2.php
, я получаю Фатальная ошибка,
PHP Fatal error: Class 'Timer' not found in path/to/class2.php at line ***
Я читал где-то на ТАК , что для этого мне нужно создать Autoloaders. Если да, то как я подхожу к созданию одного, а если нет, то что еще проблема?
UPDATE
Я создал автозагрузчик, который будет require
всех необходимых файлов на вершине моего PHP скрипта. Итак, теперь класс2.php закончится так.
namespace \src\utility\Verification;
require '/path/to/class1.php'
use Timer;
//or use src\utility\Timer ... both doesn't work.
class Verification{
Timer::somefunction();
}
Это также не работает, и это показывает, что класс не найден. Но, если я удалю все namespaces
и use
. Все работает нормально.
Попробуйте использовать ur class2.php с помощью \ src \ Timer \ Timer как Timer; –
@ManinderpreetSingh Пробовал. Тот же вопрос. –
Я думаю, вы должны проверить [Композитор] (http://getcomposer.org). Пространство имен является просто уникальным идентификатором для класса. Автозагрузка PHP перегружается при создании экземпляра класса, пока он не существует, но до того, как препроцессор выдает ошибку T_FATAL. Обычная практика заключается в том, чтобы затем заменить '\' на '/' и загрузить ее из структуры папок (почему пространство имен обычно соответствует структуре каталогов. – ash