了解嵌套的命名空间及其范围

时间:2018-03-24 00:13:14

标签: php

  1. 假设分别有命名空间A和A \ B.
  2. 在A的范围内,我是否可以在A \ B中引用一个名为C的类而不仅仅是C \?

    1. 为什么命名空间中没有预先添加的全局指示符?例如:namespace \ A;

1 个答案:

答案 0 :(得分:1)

  

假设分别有名称空间A和A \ B.

没有A和B在里面。

  

在A的范围内,我可以在A \ B中引用一个名为C的类C   没有预先B \?

如果您在A \ B中,可以使用C

<?php
namespace A\B;

class C {}

可以在代码中访问,如:

<?php
namespace A;

$C = new B\C;

<?php
namespace A\B;

$C = new C;

但你不能跳过C而不让自动加载器知道B,因为它会在A中寻找一个叫C的类,但是C在B中。

<?php
namespace A;

$C = new C;
  

为什么命名空间中没有预先添加的全局指示符?例如)   namespace \ A;

有,你不能这样做:

<?php
namespace A\B;

$C = new \A\B\C;

// but not
$C = new A\B\C;

如果你想要一个全局命名空间,你就不能这样做:

<?php
namespace;

或者

<?php
namespace \;

但你可以这样做:

<?php
namespace {
    class A {}
}

这就像没有命名空间一样。

  

函数创建的范围与by之间的关系是什么   命名空间?

函数作用域与名称空间没有任何关系。

但是在命名空间中声明的函数位于命名空间中,只能通过其命名空间访问。

<?php
namespace A;

function B() {
    echo 'Value B';
}

echo B();
// or
echo \A\B();

// this wont work
echo \B();