Le point est: Le côté gauche d'une affectation doit être une variable! La seule façon possible d'y parvenir dans votre exemple est d'évaluer l'affectation en premier - ce que fait réellement php.
parenthèses Ajout indique clairement, ce qui se passe
'' !== $host = $route->getHost()
// is equal to
'' !== ($host = $route->getHost())
// the other way wouldn't work
// ('' != $host) = $route->getHost()
Ainsi, la condition est vraie, si la valeur de retour de $route->getHost()
est une chaîne non vide et dans chaque cas, la valeur de retour est affecté à $host
.
De plus, vous pourriez avoir un oeil aux grammer de PHP
...
variable '=' expr |
variable '=' '&' variable |
variable '=' '&' T_NEW class_name_reference | ...
Si vous lisez l'opérateur precendence manual page attentivement, vous verrez cet avis
Bien que = a une priorité inférieure que la plupart des autres opérateurs, PHP permet toujours des expressions similaires à ce qui suit: if (! $ a = foo()), dans auquel cas la valeur de retour de foo() est mise dans $ a.
Do it la méthode sûre si '('' == ($ host = $ route-> getHost())) {' – JustOnUnderMillions
problème éviter d'utiliser entre parenthèses .. – scaisEdge
double possible de [JS vs PHP: cession priorité de l'opérateur lorsqu'il est utilisé avec logique-ou] (http://stackoverflow.com/questions/32672016/js-vs-php-assignment-operator-precedence-when-used-with-logical-ou) – ShiraNai7