PHP中未定义类常量通知的原因(未定义常量的使用)

PHP中未定义类常量通知的原因(未定义常量的使用),php,constants,Php,Constants,我在代码中发现了一个关于类常量的奇怪问题。虽然代码似乎工作正常,但我无法找出PHP注意到我的原因: 使用未定义的固定支付错误-第146行/src/Micro/Payments/Manager.php中假定的“支付错误” php函数中的代码如下所示: $code = Result::PAYMENT_ERROR; return new Result($code, $errMsg); // <- line 146 - causes PHP Notice 我将结果的常量传递给它自己的构造函数是否

我在代码中发现了一个关于类常量的奇怪问题。虽然代码似乎工作正常,但我无法找出PHP注意到我的原因:

使用未定义的固定支付错误-第146行/src/Micro/Payments/Manager.php中假定的“支付错误”

php函数中的代码如下所示:

$code = Result::PAYMENT_ERROR;
return new Result($code, $errMsg); // <- line 146 - causes PHP Notice
我将结果的常量传递给它自己的构造函数是否有问题?

看到区别了吗

您必须在类外使用支付\u错误

如果要这样做,请使用


这就行了。

我已经找到了发出此通知的原因并将其修复

我在
Result
课上讲过这句话:

protected $code = PAYMENT_ERROR;
这是造成上述通知的原因,因为我没有正确定义这一点。我希望PHP在实例化新类时告诉我错误消息的确切来源,而不是仅仅指向实例化所述类的行

因此,解决方案是将其更改为:

protected $code = self::PAYMENT_ERROR;

如果必须在您写入
Result::PAYMENT\u ERROR
的前一行触发此通知。使用
$code
不可能触发此通知。这使得您可能正在查看错误的文件,或者在识别正确的源代码时遇到其他问题。@dezece:我的想法与您相同,但我已经这样测试过:我添加了
die(var_dump($code))$code
后,代码>和
$code
输出$code的正确值(取自结果::付款\u错误常量),并且不显示通知。因此,错误确实是由
返回新结果($code,$errMsg)引起的。谢谢你的反馈。这也是我通常添加
$code
的原因,因为我之前是通过直接传递常量来实例化结果的,而不是通过
$code
。但这也引发了相同的注意,因此我在这里发布。注意,它说使用未定义常量,而不是类常量…是的,但我认为PHP注意事项并没有真正区分类常量和非类常量。它们是:好的,这似乎很有帮助。但是我如何在特定的类中定义这些常量呢?@edvinas.me您想在哪里使用该常量?课堂内?那么这个错误应该不会出现,但是您想在类之外使用它,您可以继续使用define()不,这并没有真正的帮助。我希望在Result中定义这些常量,然后通过将Result的常量传递给一个构造函数来创建新的Result。与中所述的方法相同,我的代码工作正常,只是通知的原因未知。我开始怀疑它可能与ResultI中的其他内容有关。我发现了问题并解决了这个问题。错误来自
Result
类中的另一行,该行错误地将$code的初始值分配给默认值
PAYMENT\u error
常量。您可以在我提供的答案中找到更多信息。PHP当然应该为您指出这一行。真奇怪,它没有。是的,这也是我所期望的。我已经提交了一份BUG报告,看看它能给我带来什么。
protected $code = self::PAYMENT_ERROR;