5

我对命名空间很陌生(是的,我已经阅读了 PHP 文档命名空间部分)。我想知道命名空间对于多个文件的范围是什么。当我在具有全局代码的文件中包含或要求该文件时,命名空间是否在一个文件之外有效?此外,这对全球代码有何影响?我是否会被迫使用全局代码更改任何语法方面的内容。

例如,假设我有文件 A.php。我希望能够拥有的是:

namespace A;
class Abc { ... }

然后假设我有一些带有全局代码的文件,称之为 main.php:

include("A.php");
class Abc { ... }
$abc = new Abc(); // Should be global Abc, right?
$abcFromNameSpace = new A\Abc(); // Should be namespace Abc, right?
...

作为一个后续问题,我还想知道如果我将一个具有命名空间的文件包含在另一个具有命名空间的文件中,那么在范围方面会发生什么,而不是上面的示例,其中 main.php 只有全局代码。会这样工作吗:

namespace A;
class Abc { ... }

然后假设我有一些带有全局代码的文件,称之为 B.php:

namespace B;
include("A.php");
class Abc { ... }
$abc = new B\Abc(); // Should be namepsace B Abc, right?
$abcFromNameSpace = new A\Abc(); // Should be namespace A Abc, right?
4

1 回答 1

7

每当您引用当前文件或类范围之外的类时,都使用其命名空间:

<?php
namespace B;

$class = new \A\Abc();

但是,如果您在脚本中“使用”命名空间,则可以将其省略:'

<?php
namespace B;

use A\Abc;

$class = new Abc();
于 2013-03-06T05:49:40.290 回答