gpt4 book ai didi

php - 与调用方位于同一命名空间中的类未找到类错误

转载 作者:行者123 更新时间:2023-12-04 16:57:31 25 4
gpt4 key购买 nike

我对此有点困惑,因为它必须非常简单。

我有以下结构:

X级:

namespace A;
use \B\Y;

class X
{
public function __construct()
{
$y = new Y();
}
}

Y级:
namespace B;

class Y
{
public function __construct()
{
$z = new Z();
}
}

Z类:
namespace B;

class Z
{
public function __construct()
{
...
}
}

主程序:
namespace A;

$x = new X();

如您所见,类 Y 和 Z 在同一个命名空间中,而类 A 在不同的命名空间中(与主程序相同)

当我尝试执行这个主程序时,我收到错误消息 PHP Fatal error: Class 'Z' not found .

如果我调试程序并在自动加载器中放置一个断点,我可以看到类 Y 被加载为\B\Y,但是类 Z 是在没有命名空间限定符的情况下加载的(它在来自同一命名空间的另一个类中使用) )。问题是,为什么在没有命名空间限定符的情况下加载类 Z?

我在命名空间 B 中有很多类,所有类都在没有命名空间限定符的情况下相互引用 - 将它们全部更改会非常痛苦(但并非不可能)。

最佳答案

确实很有趣。我发现的是这个。就我而言,类的名称是从外部源读取的,如下所示:

$className = "Segment_" . $element->getName();
$segment = new $className();

这失败了,提示没有找到该类,并且当单步执行自动加载器时,显示所请求的类不包含命名空间。我将此代码更改为以下代码:
$className = __NAMESPACE__ . "\Segment_" . $element->getName();
$segment = new $className();

这工作得很好。

我想,对于动态类名,PHP 没有预先添加当前命名空间,必须手动添加。

关于php - 与调用方位于同一命名空间中的类未找到类错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37589992/

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