gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 16:55:43 27 4
gpt4 key购买 nike

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

use Src\Myclass; 

在我的 header.php 我可以打电话
new Myclass()

现在我有一个名为 的文件index.php .我包括 header.php 在这个文件中:
include 'header.php'

由于header.php 已经有'use Src\MyClass',为什么我不能调用 new MyClass() 来自 index.php 文件?

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

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

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

我有一种感觉必须有一种更好/更干净的方式来访问所有子文件中的类,而不必添加
use Src\Myclass; 

到每个单独的子文件。

最佳答案

命名空间,即 namespaceuse声明,仅适用于它们所在的文件。它们不会隐式应用于其他包含或包含的文件。
namespaceuse实际上只是事物名称的语法助手。您可能正在写 class Src_MyClassnew Src_MyClass每次;在 PHP 中存在命名空间支持之前,这是“命名空间”的旧方式。全部 namespace确实是在文件中的每个相关名称之前隐式地添加该命名空间,以及所有 use这样做是让您通过文件内的较短名称隐式引用命名空间名称。

如果这些规则将隐式地跨文件全局应用,那么跟踪和理解什么名称实际上指的是什么就变得相当不可能了。所以这种别名和命名空间被本地化到每个单独的文件。

关于php - 从包含的子文件(php)访问父文件中的命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48581154/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com