2015-06-28 34 views
1

我是在PHP中使用名称空间的新手,他们看起来很简单。但是,当我将一个名称空间添加到包含类,接口和闭包的大文件的顶部时,代码完全停止工作。显然有些元素没有合格。php名称空间:什么需要合格?

例如:

<?php 
namespace MyNamespace; 
interface MyInterface { ... } 
class MyClass implements MyInterface { ... } 
... 

我看了在php.net的文档,但我找不到需要一个单一命名空间下的资格(全球或以其他方式)元素的简单列表。

所以我的问题是,如果您只是在其他名称空间文件的顶部声明一个名称空间,那么哪些元素需要在该场景中进行限定?

+1

正如目前所假设的'MyInterface'位于'MyNamespace'命名空间中。为了从根/全局命名空间获得'MyInterface',使用'\ MyInterface'这意味着'MyInterface'没有命名空间。如果它是命名空间,但是您应该在文件的顶部执行'\ TheNamespace \ MyInterface'或定义'\ TheNamespace \ MyInterface',这样您可以简单地使用'MyInterface' – PeeHaa

+0

“代码完全停止工作”并不是非常清晰问题描述。请提供[一个简单的代码片段的完整示例](http://stackoverflow.com/help/mcve),其中包含您期望的结果以及您得到的结果/错误消息。 – IMSoP

回答

0

现在你已经拥有了这样一个文件的方式,那个文件中的每个类,接口或函数现在都在MyNamespace命名空间中。因此,从这些类,接口和函数中,如果要引用不同名称空间(全局或命名空间)中的类,则必须使用它的完全限定名(或使用use语句在文件顶部声明别名) 。注意:预先等待一个\会让你进入全局命名空间。

此外,从文件外部,如果要访问其中某个类,接口或函数,则必须使用完全限定名。

MyNamespace\MyInterface 
MyNamespace\MyClass 

我还应该提一下,这不是一个典型的设置。根据psr标准,每个文件只能有一个类。请参阅http://www.php-fig.org/以获取有关标准和实践的更多指导。

相关问题