Il retourne $child
. C'est parce que $child
est d'abord ajouté au tableau $this->children[]
. Ensuite, le résultat de cette affectation est renvoyé.
Essentiellement, il est un raccourci pour:
public function add($child){
$this->children[]=$child;
return $child;
}
Ce type de travaux raccourcis parce que, en PHP, la cession est « droit associatif »: http://www.php.net/manual/en/language.operators.precedence.php
Cela signifie que $a = ($b = 3)
est effectivement évalué de droite -to-left, 3
étant stocké dans $b
puis$a
. De plus, voici une note sur la page que j'ai fourni un lien vers:
Bien que = a une priorité inférieure à celle la plupart des autres opérateurs, PHP va tout de même expressions similaires à l' suivant: if (!$a = foo())
, dans lequel Si la valeur de retour de foo()
est , entrez $a
.
Plus d'informations: http://en.wikipedia.org/wiki/Operator_associativity
Hm .. Ok. Je n'ai pas beaucoup de temps en ce moment mais je vais y réfléchir un peu et ensuite revenir et marquer comme la bonne réponse. Merci. –
Ok merci, j'ai posté ce que l'expression ressemblerait sans utiliser le raccourci. –
Belle explication, @SimpleCoder. Mais oui - la longueur de l'explication requise est une illustration parfaite de la raison pour laquelle ce genre de raccourci est une mauvaise idée dans le code de la vie réelle. Espérons que l'auteur de PHP in Action l'utilisait comme étude de cas sur la façon de ne pas écrire de code maintenable. –