Sont des Variables PHP passés par valeur ou par référence?
Sont des variables PHP passés par valeur ou par référence?
- Voir aussi are-arrays-in-php-passed-by-value-or-by-reference
- bonne explication dans codeexpertz.com/blog/php/...
Vous devez vous connecter pour publier un commentaire.
C'est par la valeur en fonction de la La Documentation PHP.
$str = add_some_extra($str);
si je n'étais pas à l'aide de la référence , non ? alors, quelle est la réelle valeur ajoutée de qui ?$str
serait attribué null, dans votre cas.Il semble que beaucoup de gens se confondre par la façon dont les objets sont passés aux fonctions et ce passage par référence signifie. Les variables d'objet sont toujours passés par valeur, c'est juste la valeur qui est passé en PHP5 est une référence de la poignée. Comme preuve:
Sorties:
À passage par référence signifie que nous pouvons modifier les variables qui sont vus par l'appelant. Ce qui est clairement le code ci-dessus ne fait pas. Nous avons besoin de changer la fonction de permutation à:
Sorties:
dans l'ordre de passage par référence.
swap
fonction; en d'autres termes, si les objets étaient "passés par valeur". D'autre part, c'est aussi exactement ce que vous attendez si un handle d'objet a été passé à la fonction, qui est en fait ce qui se passe. Votre code ne fait pas la distinction entre ces deux cas.En PHP, Par défaut, les objets sont transmis en tant que référence à un nouvel Objet.
Voir cet exemple.............
Maintenant voir cette..............
Maintenant voir cette ..............
j'espère que vous pouvez comprendre cela.
$y
n'est pas nécessaire - il n'y a rien dansfunction changeValue
qui nécessite d'être à l'intérieur declass Y
, de sorte que les enchevêtrements ensemble deux indépendants des concepts. Je voudrais déplacerfunction changeValue
à l'extérieur de la portée, juste au-dessus de$x = new X();
. Supprimer toutes les références à$y
. Maintenant, il est plus facile de voir que les deux premiers exemples quitter $x seul, et le troisième modifications de son contenu ànew Y()
. Ce qui serait plus facile de voir si vous sous-évaluées de latype
de$x
- le fait que les deuxX
etY
arriver à comprendre un$abc
champ est également sans pertinence pour ce qui est démontréhttp://www.php.net/manual/en/migration5.oop.php
PHP, les variables sont affectées par la valeur, passés aux fonctions par valeur, et quand ils contiennent/qui représente les objets sont passés par référence. Vous pouvez forcer les variables à passer par référence à l'aide d'un &
Attribué par valeur/référence exemple:
serait sortie de
Passé par valeur/référence exampe:
de sortie:
Les variables d'objet passé par référence exampe:
De sortie:
(le dernier exemple pourrait être mieux sans doute...)
$foo
est un pointeur vers un objet.$foo
est passé par valeur pour la fonctionchangeFoo()
, commechangeFoo()
n'a pas déclaré de son paramètre avec une&
.Vous pouvez passer une variable à une fonction par référence. Cette fonction sera en mesure de modifier la variable d'origine.
Vous pouvez définir le passage par référence à la définition de la fonction:
Vous pouvez le faire de toute façon.
mettre un "& " symbole en face et la variable que vous êtes de passage devient une et la même que celle de son origine. ie: vous pouvez passer par référence, plutôt que de faire une copie de celui-ci.
donc
Variables contenant des types primitifs sont passés par valeur en PHP5. Les Variables contenant les objets sont passés par référence. Il y a un article intéressant à partir de Linux Journal à partir de 2006 qui mentionne ceci et d'autres OO différences entre le 4 et le 5.
http://www.linuxjournal.com/article/9170
&
.Les objets sont passés par référence dans PHP 5 et par la valeur en PHP 4.
Les Variables sont passées par valeur par défaut!
Lire ici: http://www.webeks.net/programming/php/ampersand-operator-used-for-assigning-reference.html
&
.&
en face de l'paramètres dans la définition - si elles ont été adoptées par la valeur de l'objet contenu dans le champ d'application qui appelle la fonction avec comme paramètre ne seraient pas touchés.Attributs sont encore modifiables lorsqu'il n'est pas passé par référence alors méfiez-vous.
De sortie:
SwapObjects: b, a
SwapValues: a, b
En fait, les deux méthodes sont valables, mais il dépend de votre exigence.Transmettre des valeurs par référence souvent rend votre script lent. Donc de son mieux pour passer des variables par valeur en considérant le temps d'exécution. Aussi le flux de code est plus cohérent lorsque vous passer des variables par valeur.
L'utiliser pour les fonctions que vous souhaitez simplement modifier la variable d'origine et de retour à nouveau pour le même nom de variable avec sa nouvelle valeur assignée.
Dépend de la version 4 est en valeur, 5 est par référence.