Когда надо использовать use для namespace?

383
26 августа 2017, 01:59

Заметил что Шторм выдаёт информацию что use не имеет эффекта никакого:

Почитал доку http://php.net/manual/ru/language.namespaces.importing.php но так и не понять в каком случае ничего не нбудет работать без use как алиас понятно его можно использовать что бы сократить длинное имя. В обычном случае когда делаю $obj - new \Model\MyClass(); непонятно

Answer 1

Допустим у вас есть класс

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();
Answer 2

В пространстве имен все относительно. Например, Вы находитесь в пространстве имен 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 . Это равносильно.

READ ALSO
В mySQL не отправляются данные из формы

В mySQL не отправляются данные из формы

Почему-то данные из формы никак не хотят лететь в бд,даже при условии того,что отчаявшись, я просто копирую код из разных гайдов и делаю всё...

267
Изменение регулярного выражения php

Изменение регулярного выражения php

здравствуйте, есть регулярное выражение - '#\[b\](*?)\[/b\]#s', не подскажите как можн оего изменить, чтобы текст внутри него как бы trim'ился? то есть...

240
Значение cookie в select value

Значение cookie в select value

Имеется следующая форма

245