web-dev-qa-db-fra.com

instance de négation

Quel est le format correct pour annuler l'instanceof?

if ( ! $a instanceof stdClass)

ou

if ( ! ($a instanceof stdClass) ) 

Je me suis convaincu que ce dernier est correct, probablement après avoir lu un article de blog il y a plusieurs années, mais après quelques tests en ligne de commande, ils semblent tous deux équivalents. Sont ils?

55
Mathew

Lisons les docs :

Le tableau suivant répertorie les opérateurs par ordre de priorité, les plus prioritaires étant en haut. [...]

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

Donc instanceof a une priorité plus élevée, donc les deux instructions sont équivalentes. Les parenthèses sont probablement utilisées pour le rendre évident, vous n'avez donc pas besoin de le rechercher dans la documentation.

82
Álvaro González

Sont-ils équivalents?

Oui, logiquement, ils sont équivalents. La réponse par Álvaro G. Vicario fournit plus de détails pourquoi.

Quel est le format correct pour annuler l'instance de?

Des deux, il existe un argument selon lequel ce qui suit est plus lisible. Mais il n'y a pas un seul chemin. C'est la beauté et la malédiction de PHP.

!($a instanceof stdClass)
13
Jason McCreary