多个文件和命名空间范围

J J*_*son 5 php scope namespaces global file

我对命名空间很新(是的,我已经阅读了PHP文档命名空间部分).我想知道命名空间的范围与多个文件有关.当我在具有全局代码的文件中包含或要求该文件时,名称空间是否有效超出一个文件?此外,这对全局代码有何影响?我是否会被迫使用全局代码更改语法.

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

namespace A;
class Abc { ... }
Run Code Online (Sandbox Code Playgroud)

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

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

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

namespace A;
class Abc { ... }
Run Code Online (Sandbox Code Playgroud)

然后让我说我有一些带有全局代码的文件,称之为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?
Run Code Online (Sandbox Code Playgroud)

Eme*_*ing 7

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

<?php
namespace B;

$class = new \A\Abc();
Run Code Online (Sandbox Code Playgroud)

但是,如果您在脚本中"使用"命名空间,则可以将其删除:

<?php
namespace B;

use A\Abc;

$class = new Abc();
Run Code Online (Sandbox Code Playgroud)

  • 我知道了.但是,对我来说似乎有点奇怪,名称空间范围不会超出当该文件包含在另一个文件中时定义的文件.我的意思是,所有其他代码都成为文件的一部分,它被包含在include语句所在的行中. (3认同)