Устранение неполадок «Операция использования с не-составным именем … не влияет»

Получение этой ошибки, когда я use Blog; на вершине.

Предупреждение: заявление использования с не-составным именем «Блог» не влияет на …

Blog – это мое пространство имен, в котором у меня есть 3 класса: статья, список и категория и несколько функций.

Если я изменю свой statememnt, чтобы use Blog\Article; то он работает …

Не могу ли я просто указать пространства имен, которые я хочу использовать? Нужно ли предоставлять классы?

Что делать, если у меня есть функции внутри этих пространств имен? Когда я вызываю их за пределами пространства имен, я вынужден добавить \Blog\ к каждому имени …

use PHP не совпадает с using namespace C ++; он позволяет вам определить псевдоним , а не «импортировать» пространство имен и, следовательно, впредь опустить спецификатор пространства имен вообще.

Итак, вы можете сделать:

 use Blog\Article as BA; 

… сократить его, но вы не можете полностью избавиться от него.


Следовательно, use Blog бесполезно, но я считаю, что вы могли бы написать:

 use \ReallyLongNSName as RLNN; 

Обратите внимание, что вы должны использовать ведущую \ здесь, чтобы заставить анализатор ReallyLongNSName что ReallyLongNSName полностью соответствует требованиям. Это неверно для Blog\Article , который, очевидно, уже является цепочкой пространств имен:

Обратите внимание, что для имен с именами (полностью именуемые имена пространства имен, содержащие разделитель пространства имен, например Foo\Bar в отличие от глобальных имен, которые этого не делают, например FooBar ), ведущая обратная косая черта не нужна и не рекомендуется, так как имена импорта должны быть полностью квалифицированными, и не обрабатываются относительно текущего пространства имен.

Поскольку этот вопрос появляется в качестве первого результата в Google для этой ошибки, я укажу, как я ее исправил.

В принципе, если у вас есть фреймворк, скажем, как Yii2, вам придется делать объявления классов вроде:

 use Yii; use yii\db\WhatEver; class AwesomeNewClass extends WhatEver { } 

Вы получите эту ошибку при Use Yii так как этот класс не имеет пространства имен.

Поскольку этот класс не имеет пространства имен, он автоматически наследует глобальную таблицу символов и поэтому не нуждается в таких вещах, как это определение, просто удалите его.

Оператор use в PHP – это просто удобство для псевдонима длинного пространства имен во что-то, что может быть немного легче читать. На самом деле он не содержит никаких файлов или ничего другого, что влияет на вашу разработку, помимо удобства. Поскольку, Blog не является псевдонимом как все, что вы не набираете ни одного из удобства. Я мог бы представить, что вы могли бы сделать что-то вроде

use \Blog as B;

И это может даже работать. ( Можно утверждать, что вы фактически теряете удобство здесь, затеняя, но это не тот вопрос, о котором идет речь ), потому что вы фактически накладываете пространство имен в Blog на что-то другое. Использование Blog\Article работает, потому что, согласно документам:

 // this is the same as use My\Full\NSname as NSname use My\Full\NSname; 

Таким образом, ваш фрагмент будет эквивалентен:

 use Blog\Article as Article; 

Ошибка «Оператор использования … не имеет эффекта …» также появляется, если вы пытаетесь использовать признак перед определением класса.

 use My_trait; // should not be here class My_class{ // use My_trait; should be here instead } 

если вы не хотите использовать синтаксис «как», например

 use \Blog as B; 

определить пространство имен для файла

 namespace anyname; use Blog