当我放在use Blog;顶部时出现此错误.
警告:非复合名称'Blog'的use语句对...没有影响
Blog 是我的命名空间,我有3个类:文章,列表和类别以及一些函数.
如果我改变我的状态,use Blog\Article;那么它有效......
我不能只指定我想要使用的命名空间吗?我需要提供课程吗?
如果我在该命名空间中有函数怎么办?当我在命名空间之外调用它们时,我被迫\Blog\在每个人的名字前面加上...
Lig*_*ica 80
PHP use与C++不同using namespace; 它允许您定义别名,而不是"导入"命名空间,从而完全省略命名空间限定符.
所以,你可以这样做:
use Blog\Article as BA;
Run Code Online (Sandbox Code Playgroud)
......缩短它,但你不能完全摆脱它.
因此,use Blog没用,但我相信你可以写:
use \ReallyLongNSName as RLNN;
Run Code Online (Sandbox Code Playgroud)
请注意,您必须\在此处使用前导强制解析器知道它ReallyLongNSName是完全限定的.这不是真的Blog\Article,显然已经是一系列命名空间:
请注意,对于名称空间名称(包含名称空间分隔符的完全限定名称空间名称,例如与不使用名称空间分隔符的
Foo\Bar全局名称相对FooBar),前导反斜杠是不必要的,不推荐使用,因为导入名称必须是完全限定的,并且不会被处理相对于当前命名空间.
Sam*_*aye 23
由于这个问题似乎是谷歌针对此错误的第一个结果,我将说明我是如何修复它的.
基本上如果你有一个框架,比如Yii2,你将习惯于必须做类似的声明类:
use Yii;
use yii\db\WhatEver;
class AwesomeNewClass extends WhatEver
{
}
Run Code Online (Sandbox Code Playgroud)
您将收到此错误,Use Yii因为此类没有命名空间.
由于此类没有命名空间,因此它会自动继承全局符号表,因此不需要像这样定义的东西,只需将其删除即可.
usePHP 中的语句实际上只是为了方便地将长命名空间别名为可能更易于阅读的内容。除了提供便利之外,它实际上不包含任何文件或执行任何其他影响您的开发的事情。因为,Blog没有别名为您没有获得任何便利的任何东西。我可以想象你可以做类似的事情
use \Blog as B;
这甚至可能奏效。(可能有人会争辩说,您实际上通过遮蔽而失去了便利性,但这不是问题所在)因为您实际上是将Blog名称空间别名为其他名称。使用Blog\Article作品是因为,根据文档:
// this is the same as use My\Full\NSname as NSname
use My\Full\NSname;
Run Code Online (Sandbox Code Playgroud)
所以你的代码段相当于:
use Blog\Article as Article;
Run Code Online (Sandbox Code Playgroud)
如果您不想使用“as”语法,例如
use \Blog as B;
Run Code Online (Sandbox Code Playgroud)
为文件定义命名空间
namespace anyname;
use Blog
Run Code Online (Sandbox Code Playgroud)