У меня в пространстве имен Test, есть класс A.
При реализации нового класса В в этом же пространстве имени, мне не обязательно писать use Test;, чтобы иметь доступ к классу A?
Можно сразу так: ?
namespace Test;
class B {
public function A() { return new A(); }
}
На практике это работает. Но можно ли так делать, и не будут ли ошибки в будущем ?
Также, если вышенаписанное правда, то как быть, если в классе B нужно будет юзать класс C из пространства имен Test\SubTest ?
Нужно полностью писать use Test\SubTest;
или можно сокращенно use SubTest;
?
Указывая namespace Test; вы обозначаете что находитесь в пространстве имен Test. Поэтому вам не нужно его использовать (указывать с помощью оператора use) ведь вы уже в нем.
По поводу второго вопроса. Использую оператор use вам нужно указывать абсолютный путь пространства имен. То есть use Test\SubTest;. Если же не использовать опертор use вы можете прямо в коде использовать относительный путь. Например new SubTest\C;. Что будет равносильно new Test\SubTest\С; если вы находитесь в пространстве имен Test.
Вы можете подробнее почитать про использование пространства имен здесь: https://www.php.net/manual/ru/language.namespaces.php
Продвижение своими сайтами как стратегия роста и независимости