7.0 之前的 PHP 中的后期静态绑定和 isset

Late static binding & isset in PHP prior 7.0

以下代码在 PHP 7.0 及更高版本上按预期工作:

class foo {
    const BLAH = [];

    public function bar() {
        return isset(static::BLAH['baz']);
    }
}

var_dump((new foo)->bar());

而 PHP 5.6 只给出:

Fatal error: Cannot use isset() on the result of an expression (you can use "null !== expression" instead)

按照建议更改代码会导致通知(这是预期的):

Notice: Undefined index: baz

这可行:

class foo {
    const BLAH = [];

    public function bar() {
        return null !== static::BLAH['baz'];
    }
}

var_dump(@(new foo)->bar());

有没有不以通知结尾的替代方案,没有在调用前加上 @ 前缀?

您可以改用 array_key_exists,它应该可以在 PHP5 上正常工作。

return array_key_exists('baz', static::BLAH);

请注意,与 isset 的细微差别是,如果定义了 static::BLAH['baz']array_key_exists 将始终 return true,而 isset将 return false 如果已定义但其值为 null.