我在代码中发现了一个关于类常量的奇怪问题。虽然看起来代码确实可以正常工作,但我无法弄清楚PHP的原因通知我:
Use of undefined constant PAYMENT_ERROR - assumed 'PAYMENT_ERROR' in /src/Micro/Payments/Manager.php on line 146
Manager.php函数中的代码如下所示:
$code = Result::PAYMENT_ERROR;
return new Result($code, $errMsg); // <- line 146 - causes PHP Notice
对我来说,奇怪的是$code
变量设置正确并且不会触发任何通知。只实例化Result。
Result类非常简单:
class Result
{
// ... boilerplate code skipped ...
// constant is defined like this:
const PAYMENT_ERROR = 2;
public function __construct($code, array $messages)
{
$this->code = $code;
$this->messages = $messages;
}
// ... other functions skipped as they are not relevat ...
}
是否存在将Result的常量传递给它自己的构造函数的问题?
答案 0 :(得分:4)
我已找到此通知的原因并修复了它。
我在Result
课程中有这一行:
protected $code = PAYMENT_ERROR;
这导致了上面的通知,因为我没有正确定义。我希望PHP能够在实例化新类时告诉我错误消息的来源,而不仅仅是指向一个所述类被实例化的行。
所以解决方法是将其更改为:
protected $code = self::PAYMENT_ERROR;
答案 1 :(得分:0)