在PHP中使用未定义的类常量NOTICE的原因(使用未定义的常量)

我在代码中发现了一个关于类常量的怪异问题.虽然代码似乎可以正常运行,但我无法弄清PHP的原因注意:

使用未定义的常量PAYMENT_ERROR-在第146行的/src/Micro/Payments/Manager.php中假定为’PAYMENT_ERROR’

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的常量传递给它自己的构造函数是否有问题?

解决方法:

我已找到此通知的原因并进行了修复.

我在Result类中有此行:

protected $code = PAYMENT_ERROR;

这是造成上述通知的原因,因为我没有正确定义.我本来希望PHP在实例化新的Class时告诉我错误消息的确切来源,而不仅仅是指向实例化该Class的行.

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

protected $code = self::PAYMENT_ERROR;
上一篇:PHP-在Symfony中使用名称空间时出现未定义的常量错误


下一篇:java – 为什么Netbeans建议变量最终