PHP:扩展类是不是需要另一个“使用”来调用命名空间?

Posted

技术标签:

【中文标题】PHP:扩展类是不是需要另一个“使用”来调用命名空间?【英文标题】:PHP : Does extending class need another 'use' to call namespace?PHP:扩展类是否需要另一个“使用”来调用命名空间? 【发布时间】:2012-08-01 10:53:23 【问题描述】:

我想知道在我扩展一个上面已经有'use'关键字的类以使用特定命名空间的情况下 - 我是否需要在继承类之上添加另一个'use'才能使用相同的命名空间?像这样的情况:

namespace Core;

use System\Plugin;

class Front extends Application  

现在在Controller中,直接调用,没有命名空间(使用完整路径):

use System\Plugin;

class PageController extends Front  

或者它是否也可以在没有“使用”的情况下工作并允许我使用 System\Plugin 命名空间:

class PageController extends Front  

?

【问题讨论】:

【参考方案1】:

不,您需要在两个文件中都使用“use”语句。使用是文件级关键字,不受继承影响。

请参阅scoping rules for importing 和手册页底部描述我所说内容的小方框。

【讨论】:

显然,如果在 Front 类中我已经从 Plugin 命名空间中实例化了一个对象,那么我可以在没有继承类中的“use System\Plugin”的情况下使用它。 当然,您也不一定总是需要 use 语句。使用完全限定的命名空间也可以。 如果类可以从父类继承 use 语句会很好(即 ​​DRYer)

以上是关于PHP:扩展类是不是需要另一个“使用”来调用命名空间?的主要内容,如果未能解决你的问题,请参考以下文章

具有动态类名的 PHP 命名空间

PHP中命名空间是怎样的存在?

PHP SimpleXML->addChild - 不需要的空命名空间属性

类文件如何使用命名空间和使用包含在另一个文件 php 中?

PHP强制函数调用

尝试从命名空间加载类您是不是忘记了另一个命名空间的“使用”语句?