我是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;
到每个单独的子文件。
答案 0 :(得分:1)
命名空间,即library(dplyr)
X %>%
left_join(Y %>%
group_by(Id) %>%
summarise(sale_total = sum(sale_value)),
by = 'Id')
和 namespace
声明,仅适用于他们所处的文件。它们不会隐式地应用于其他文件包含或包含文件。
use
和namespace
实际上只是名称的语法助手。你可以写use
和{{ 1}}每次;这就是"命名空间"在PHP中存在名称空间支持之前。所有class Src_MyClass
所做的就是在文件中的每个相关名称之前隐式地添加该命名空间,而new Src_MyClass
所做的只是让您通过文件中的较短名称隐式引用命名空间名称。
如果这些规则将隐式地跨文件全局应用,那么跟踪和理解实际引用的名称将变得相当不可能。因此,此别名和命名空间已本地化到每个单独的文件。