Comment faites-vous passer des objets par référence en PHP 5?
En PHP 5, vous êtes tenus d'utiliser le &
modificateur de passer par référence? Par exemple,
class People() { }
$p = new People();
function one($a) { $a = null; }
function two(&$a) { $a = null; )
En PHP4 vous avez besoin d'une &
modificateur de maintenir une référence après un changement avait été fait, mais je suis confus sur les sujets que j'ai lu concernant PHP5 l'utilisation automatique du passage par référence, sauf lorsqu'explicitement le clonage de l'objet.
En PHP5, est le &
modificateur requis pour passer par référence pour tous les types d'objets (variables, les classes, les tableaux, ...)?
- Le manuel de résoudre tous vos problèmes. php.net/manual/en/language.oop5.references.php
Vous devez vous connecter pour publier un commentaire.
Techniquement/sémantiquement, la réponse est oui, même avec des objets. C'est parce qu'il y a deux façons de passer/affecter un objet: par référence ou par identificateur. Lorsqu'une déclaration de fonction contient un
&
, comme dans:L'argument va être passé par référence, n'importe quoi. Si vous déclarez sans
&
Tout sera passé par valeur, à l'exception des objets et des ressources, qui seront ensuite transmises par le biais d' identificateur. Qu'est ce qu'un symbole? Eh bien, vous pouvez la considérer comme une référence à une référence. Prenons l'exemple suivant:
Alors pourquoi ne pas
$a
soudainement devenu un entier après le passage àmakezero
? C'est parce que nous n'écrasait la identificateur. Si nous étions passés par référence:Maintenant
$a
est un entier. Donc, il y a une différence entre passer par identificateur et en passant par référence.Objets par référence. Construit dans les types de être passé par valeur (copie);
Ce qui se passe derrière les coulisses, c'est que lorsque vous passez une variable qui contient un objet, c'est une référence à l'objet. Si la variable elle-même est copié, mais il fait toujours référence au même objet. Donc, essentiellement, il existe deux variables, mais les deux pointent vers le même objet. Les modifications apportées aux objets à l'intérieur d'une fonction persiste.
Dans le cas du code que vous avez là (d'abord vous avez besoin de $, même avec des &):
&
modificateur?&
modificateur de prouver votre point si il n'est pas nécessaire, il n'est pas de m'aider à comprendre ma question.Vous l'utilisez mal. Le signe $ est obligatoire pour toute variable. Il devrait être:
http://php.net/manual/en/language.references.pass.php
Dans les objets et les tableaux, une référence à l'objet est copié dans le paramètre formel, une égalité des opérations sur les deux objets est une bourse de référence.
$
signe, désolé.