Позднее статическое связывание и isset в PHP до 7.0 - PullRequest
0 голосов
/ 05 марта 2019

Следующий код работает, как и ожидалось, в 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());

Есть ли альтернатива, которая не заканчивается уведомлениембез префикса вызова с @?

1 Ответ

0 голосов
/ 05 марта 2019

Вместо этого вы можете использовать array_key_exists, что должно работать без проблем с PHP5.

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

Обратите внимание, что небольшая разница с isset заключается в том, что array_key_exists всегда будет возвращать true, если определено static::BLAH['baz'], тогда как isset вернет false, если оно определено, но его значение равно null.

...