2010-09-20 31 views
4

fonction publique add ($ enfant) { return $ this-> children [] = $ child; Btw, ceci est un extrait de PHP in Action de Dagfinn Reiersol. Selon le livre, cela renvoie $ child, mais ne devrait-il pas retourner true en cas d'attribution réussie et false sinon?Que retourne cette fonction PHP?

Merci à l'avance

Répondre

9

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 $bpuis$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

+0

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. –

+0

Ok merci, j'ai posté ce que l'expression ressemblerait sans utiliser le raccourci. –

+0

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. –

1

Il ne retourne enfant, car une mission retourne juste tout ce qui était assigné.

Si oui ou non il devrait retourner vrai en cas de succès n'est pas une règle, donc si c'était documenté pour renvoyer l'enfant, c'est correct.