【问题标题】:PHP use root namespace within another namespace without backslashPHP在另一个命名空间中使用根命名空间,没有反斜杠
【发布时间】:2015-03-24 14:28:17
【问题描述】:

我的根命名空间中有一堆类。我想在另一个命名空间中使用它们,但我不知道如何“包含”它们,这样我就不必在开头添加反斜杠。

class A {
    public static $a = 1;
}

namespace B {
    use \; // apparently invalid 

    class C {
        static function D { return A::$a; } // desired syntax
    }
}

\B\C::D(); // expected result is 1

这可能吗?

【问题讨论】:

标签: php oop namespaces


【解决方案1】:

无论命名空间是否为“root”,您都不能使用use 导入整个命名空间。您能做的最好的事情是:

use A;

【讨论】:

  • 这不是真的,我几乎可以打赌我在 laravel 中看到过导入的命名空间
  • use 只是将名称别名到其他名称。是的,您当然可以给命名空间起别名,例如use Foo\Bar,它是use Foo\Bar as Bar 的缩写。但是,你还是要写Bar\Baz,不能只写Baz来使用\Foo\Bar\Baz。我是说你不能只用一个 use 语句为命名空间中的所有类起别名。
  • 哦,如果可以的话,那就太棒了。
  • 不幸的是,这根本不是 PHP 的工作方式。命名空间只是符号(类名等)之上的一层。命名空间无法知道其中的所有类,因为 PHP 通常在首次使用类时(自动)加载类,而不是在您编写 use 语句时。 PHP 的命名空间不是模块导入系统。
【解决方案2】:

将您的 use 语句更改为

use \A -

然后你会得到你想要的语法 -

【讨论】:

  • 是的,我想我会得到这样的答案,所以我提到了“一堆类”。
  • 前导\是多余的。只是use A
猜你喜欢
  • 2014-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多