【问题标题】:Import everything from a namespace [duplicate]从命名空间导入所有内容[重复]
【发布时间】:2014-01-17 04:30:31
【问题描述】:

在 python 中,您可以执行“import star”将其他命名空间中的所有内容嵌入到本地命名空间中:

# file "spam":
def ham():
    some code

# file "main":
from spam import *
xy = ham() <-- uses 'ham' from 'spam'

这通常被认为是“不好的做法”,但我仍然想知道如何对 php 命名空间做同样的事情。以下不起作用:

# file "spam":
namespace spam;
function ham() {
    some code
}

# file "main":
include "spam.php";
use spam;    
xy = ham() <-- error

【问题讨论】:

  • 这很奇怪......我每天都这样做,而且每次都有效。用函数(或公共函数)a制作页面a.php,将其包含在页面b.php中并调用a函数。
  • @Goikiu:好点子,但我想保留“垃圾邮件”的命名空间,以便使用它的人有选择。
  • “函数和常量都不能通过use语句导入。” - php.net/…

标签: php namespaces


【解决方案1】:

在 PHP 中,您不会“从”名称空间“导入”。您只能将命名空间或类别名为另一个(可能更短)名称。所以通常你会这样做:

use Foo as F;

new F\Bar;

这就是 PHP “等价于”“尽可能方便地使用命名空间中的所有内容”。

【讨论】:

  • 附带说明,这种别名可能会影响可读性。
  • 或大幅改进,视情况而定。
  • 那么,答案是否定的?
  • @thg 是的,没办法,因为 PHP 和 Python 的机制实际上非常不同。苹果和橙子。
  • 好的,use spam\ham 也不起作用。这是预期的吗?
【解决方案2】:

虽然没有办法用一行来包含命名空间中的所有类,但几乎可以像使用任何其他语言一样,但我发现让 IDE 自动处理“用例”非常有用。

我强烈建议您查看PhpStorm(这是我个人的最爱)。它在使用自动完成功能时自动编写“使用”行做得很好。

https://www.jetbrains.com/phpstorm/webhelp/creating-imports.html

【讨论】:

  • 谢谢,很有帮助!
猜你喜欢
  • 2012-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-10
相关资源
最近更新 更多