Заметил что Шторм выдаёт информацию что use не имеет эффекта никакого:
Почитал доку http://php.net/manual/ru/language.namespaces.importing.php но так и не понять в каком случае ничего не нбудет работать без use как алиас понятно его можно использовать что бы сократить длинное имя. В обычном случае когда делаю $obj - new \Model\MyClass(); непонятно
Допустим у вас есть класс
namespace Model;
class MyClass{
.....
Тогда в другом пространстве имен для использования этого класса вам придется либо использовать полное имя класса(с его пространством имен), либо можно использовать use Model\MyClass; и после этого, при обращении к классу, пространство имен не писать.
Т.е. или так
use Model\MyClass;
$myClass = new MyClass();
или так
$myClass = mew \Model\MyClass();
Эти два варианта использования абсолютно равнозначны.
UPD если у вас в двух пространствах имен присутствуют классы с одинаковым именем, то при попытке использовать и тот и тот PHP выдаст fatal error.
sandbox
UPD Обратите внимание, что при использовании полного имени класса, если перед пространством имен не поставить \("корневое" пространство имен), то имя будет считаться относительно текущего пространства имен.
Т.е. вот тут
namespace C;
$a = new B\A();
Будет считаться, что вы написали так:
namespace C;
$a = new \C\B\A();
В пространстве имен все относительно.
Например, Вы находитесь в пространстве имен namespace \models\
а) И пытаетесь использовать класс User, находящийся в том же namespace, то use использовать не нужно. Можно обращаться напрямую $user = new User();
б) Пытаетесь использовать класс User, находящийся в namespace \components\
Тогда надо писать $user = new \components\User() в классе MyClass;
Или, чтобы не писать всегда в разных местах кода путь к классу, один раз указать use components\User
А потом вызов станет короче: $user = new User();
Почему при использовании use не обязателен ведущий слэш - я не знаю, но можно его не указывать, а можно писать use \components\User . Это равносильно.
Продвижение своими сайтами как стратегия роста и независимости