Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 多个文件和名称空间作用域_Php_File_Namespaces_Scope_Global - Fatal编程技术网

Php 多个文件和名称空间作用域

Php 多个文件和名称空间作用域,php,file,namespaces,scope,global,Php,File,Namespaces,Scope,Global,我对名称空间非常陌生(是的,我已经阅读了PHP文档名称空间部分)。我想知道多个文件的名称空间的范围是什么。当我在具有全局代码的文件中包含或需要一个文件时,命名空间是否有效?此外,这对全局代码有何影响?我会被迫更改全局代码的任何语法 例如,假设我有一个文件A.php。我想要的是: namespace A; class Abc { ... } 然后假设我有一个全局代码文件,称之为main.php: include("A.php"); class Abc { ... } $abc = new Abc

我对名称空间非常陌生(是的,我已经阅读了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?

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

<?php
namespace B;

$class = new \A\Abc();

只是澄清一下,那么名称空间的范围仅限于文件?对于全局示例(第一个示例),在main.php中,如果我执行$class=new Abc();那么我指的是全局类。如果我想引用名称空间A的Abc类,我必须执行$class=new\A\Abc();是吗?没错。如果不在文件顶部定义名称空间,则会在全局范围中查找类名。否则,将仅在文件命名空间中查找
Abc()
(除非您预先添加反斜杠以断言全局命名空间)。不过,对我来说似乎有点奇怪,当文件包含在另一个文件中时,名称空间的作用域并不超出它们在其中定义的文件。我的意思是,所有其他代码都成为文件的一部分,它包含在include语句所在的行中。
<?php
namespace B;

use A\Abc;

$class = new Abc();