首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP命名空间和implements关键字

PHP命名空间和implements关键字
EN

Stack Overflow用户
提问于 2009-08-11 16:57:58
回答 3查看 2.8K关注 0票数 1
代码语言:javascript
复制
use MyNamespace;

class NonPersistentStorage implements StorageInterface

两者都在MyNamespace中。然而PHP寻找MyNamespace\NonPersistentStorage和StorageInterface (而不是MyNamespace\StorageInterface)。我是不是遗漏了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-08-11 17:09:11

实际上,"use“声明完全没有任何作用。当名称空间位于名称空间层次结构的较深位置(例如,使用Foo\Bar\Baz)或要为其指定别名(例如,使用Foo作为Bar)时,应导入(使用)名称空间。我认为您希望声明该文件本身属于MyNamespace:

代码语言:javascript
复制
namespace MyNamespace;

class NonPersistentStorage implements StorageInterface { /* ... */ }

或者,您可能还希望使用与命名空间相同的语法导入单独的函数和类。

票数 2
EN

Stack Overflow用户

发布于 2009-08-11 17:14:19

PHP名称空间的工作方式与其他语言略有不同。在导入命名空间时,并不是真正将类带入作用域,而只是给命名空间加上别名。只导入一个级别的命名空间绝对不起任何作用。即使在导入某些内容时,您仍然需要引用其最底层的名称空间。

例如,如果您有以下内容:

foo.php:

代码语言:javascript
复制
namespace Bar\Baz\Biz;

class Foo
{}

下面是你如何使用它:

blah.php:

代码语言:javascript
复制
use Bar\Baz\Biz;

$var=new Biz\Foo();

明白了吗,即使我导入了它,我仍然必须使用Biz来引用它?

但是,您可以使用别名来解决此问题:blah.php:

代码语言:javascript
复制
use Bar\Baz\Biz\Foo as Foo;

$var=new Foo();

如您所见,我不再需要对其进行限定。

然而,不幸的是,PHP中没有"import all“;如果您想要执行上述操作,则必须为每个要导入的类指定别名。

票数 3
EN

Stack Overflow用户

发布于 2009-08-11 17:02:10

尝试使用:

代码语言:javascript
复制
use MyNamespace;

class NonPersistentStorage implements MyNamespace\StorageInterface
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1261666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档