отрицание оператор instanceof

какой правильный формат для отрицания instanceof?

if ( ! $a instanceof stdClass)

или

if ( ! ($a instanceof stdClass) ) 

Я убедил себя, что последнее правильно, вероятно, после прочтения статьи в блоге несколько лет назад, но после некоторых тестов командной строки они оба кажутся эквивалентными. Are они?

2 ответов


давайте прочтем документы:

в следующей таблице перечислены операторы в порядке приоритета, с наивысшим приоритетом на вершине.[...]

Associativity      Operators       Additional Information
================== =============== ======================
non-associative    instanceof      types
right              !               logical

Так instanceof имеет более высокий приоритет, поэтому оба оператора эквивалентны. Скобки, вероятно, используются, чтобы сделать его очевидным, поэтому вам не нужно искать его в документации.


эквивалентны ли они?

да, логически они эквивалентны. ответ by Альваро Г. Викарио предоставляет более подробную информацию почему.

какой правильный формат для отрицания экземпляра?

из двух, есть аргумент, что более читабельным. Но нет ни одного путь. В этом красота и проклятие PHP.

!($a instanceof stdClass)