从包含的子文件(php)访问父文件中的命名空间

时间:2018-02-02 10:55:43

标签: php namespaces

我是PHP命名空间项目的新手。我正在尝试设置一个简单的项目。假设我有一个文件 header.php 。在文件的顶部,我有这个代码:

use Src\Myclass; 

在我的 header.php 中,我可以致电

new Myclass()

现在我有一个名为 index.php 的文件。我在此文件中包含 header.php

include 'header.php'

由于header.php已经'使用Src \ MyClass',为什么我不能从 index.php中调用 new MyClass() 文件?

如果我也将use语句添加到index.php文件中,我可以再次调用新的MyClass(),但它似乎是多余的,因为我已经在包含的header.php中包含了use语句?

当在父文件中声明使用,然后包含子文件时,同样的问题也适用。子文件将无法访问父文件中use语句附带的类。

所以,如果我有一个 index.php 文件,它调用10个子文件(例如) menu.php footer.php partial-1.php 等。我是否需要将use语句添加到所有这些子文件中? (看起来它来自我的测试)为什么我不能通过父文件中的use语句访问该类?就像我通常能够访问父类中定义的变量一样。

我觉得必须有更好/更清晰的方式来访问所有子文件中的类,而不必添加

use Src\Myclass; 

到每个单独的子文件。

1 个答案:

答案 0 :(得分:1)

命名空间,即library(dplyr) X %>% left_join(Y %>% group_by(Id) %>% summarise(sale_total = sum(sale_value)), by = 'Id') namespace声明,仅适用于他们所处的文件。它们不会隐式地应用于其他文件包含或包含文件。

usenamespace实际上只是名称的语法助手。可以use和{{ 1}}每次;这就是"命名空间"在PHP中存在名称空间支持之前。所有class Src_MyClass所做的就是在文件中的每个相关名称之前隐式地添加该命名空间,而new Src_MyClass所做的只是让您通过文件中的较短名称隐式引用命名空间名称。

如果这些规则将隐式地跨文件全局应用,那么跟踪和理解实际引用的名称将变得相当不可能。因此,此别名和命名空间已本地化到每个单独的文件。