gpt4 book ai didi

php - PHP 什么时候需要在创建类之前查看类?

转载 作者:可可西里 更新时间:2023-10-31 22:14:12 28 4
gpt4 key购买 nike

PHP 不需要前向声明。

$core = new Core();
class Core {

工作正常

$test = new ParamSet(new IntParam(1));
echo($test->asString());

interface ParamType {
/*snipped*/
}

class IntParam implements ParamType {
/*snipped*/
}

class ParamSet implements ParamType {
/*snipped*/
}

没有,我得到:

Fatal error: Class 'ParamSet' not found in

不知道为什么,我已经包含了层次结构,以防它很重要。将 $test 移到定义下方使其工作。

最佳答案

被视为 bug (发送此帖子时是错误,但后来标记为不是错误 - 顺便说一下,感谢这个问题。那个“错误”已关闭)。

事情是 - 甚至 class_exists() (即标准指标功能)将显示它实际上不存在:

//false, true
var_dump(class_exists('ParamSet'), class_exists('IntParam'));

interface ParamType {
/*snipped*/
}

class IntParam {
/*snipped*/
}

class ParamSet implements ParamType {
/*snipped*/
}

解决方案 - 是的,在接口(interface)上定义之后 创建类实例 - 甚至 - 在类定义之后。

重要更新

实际上,虽然 bugs.php.net 说这是一个错误,但在与 PHP 内部人员交谈后 - 我意识到这不是一个错误(嗯,绝对不是“漏洞”)。这是一种有意的行为。

真正的原因是:实现接口(interface)将类声明变成了条件声明。所以这将在运行时而不是在解释阶段进行评估。这就是为什么 class_exists() 和其他东西在这种情况下不会确定类定义。因此,虽然此解决方案将保持不变(即实例化 after 声明)- 重要的是要更新我对此类行为的所有原因都不正确。

关于php - PHP 什么时候需要在创建类之前查看类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23055172/

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