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

Reason for Undefined class constant NOTICE in PHP (Use of undefined constant)

我在代码中发现了一个关于类常量的奇怪问题。虽然代码看起来工作正常,但我无法找出我收到PHP通知的原因:

Use of undefined constant PAYMENT_ERROR - assumed 'PAYMENT_ERROR' in /src/Micro/Payments/Manager.php on line 146

manager.php函数中的代码如下:

1
2
$code = Result::PAYMENT_ERROR;
return new Result($code, $errMsg); // <- line 146 - causes PHP Notice

奇怪的是,$code变量设置正确,不会触发任何通知。只有实例化结果才能。

结果类非常简单:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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班上有这句话:

1
protected $code = PAYMENT_ERROR;

这引起了上面的注意,因为我没有正确地定义这一点。在实例化新类时,我希望PHP能够准确地告诉我错误消息来自何处,而不是仅仅指向该类所在的行。

所以解决办法是把它改成:

1
protected $code = self::PAYMENT_ERROR;


请参见define()与const的区别

您必须使用付款错误outside the class

如果要这样做,请使用define()。

这就行了。