Avec PHP5 en utilisant "copier sur écriture" et en passant par référence provoquant plus d'une pénalité de performance d'un gain, pourquoi devrais-je utiliser passer-par-référence? A part les fonctions de rappel qui retourneraient plus d'une valeur ou les classes dont les attributs que vous voulez modifier sans appeler une fonction set plus tard (mauvaise pratique, je sais), y a-t-il un usage qui me manque?Faut-il passer variable par référence en php5?
Répondre
Vous utilisez le renvoi par référence lorsque vous voulez modifier le résultat et c'est tout ce qu'il y a à faire. Rappelez-vous également que les objets PHP sont toujours passer-par-référence.
Personnellement, je trouve implicitement le système de copie de valeurs de PHP (je suppose pour me défendre contre une modification accidentelle) lourd et non intuitif mais là encore j'ai commencé dans des langages fortement typés, ce qui explique probablement cela. Mais je trouve intéressant que les objets diffèrent du fonctionnement normal de PHP et je le prends comme preuve que le mécanisme de copie implicite de PHP n'est vraiment pas un bon système
Une fonction récursive qui remplit un tableau Rappelez-vous d'écrire quelque chose comme ça , une fois.
Il est inutile d'avoir des centaines de copies d'un tableau partiellement rempli et la copie, l'épissage et l'assemblage de pièces à chaque tour.
objets Même lors du passage il y a une différence.
Try this exemple:
class Penguin { }
$a = new Penguin();
function one($a)
{
$a = null;
}
function two(&$a)
{
$a = null;
}
var_dump($a);
one($a);
var_dump($a);
two($a);
var_dump($a);
Le résultat sera:
object(Penguin)#1 (0) {}
object(Penguin)#1 (0) {}
NULL
Lorsque vous passez une variable contenant une référence à un objet par référence, vous pouvez modifier la référence à l'objet.
- 1. Passer une chaîne par référence en Javascript
- 2. passer tableau par référence
- 3. Passer une variable par référence dans une extension PHP
- 4. Passer par référence à travers plusieurs fonctions
- 5. Java, passer par valeur, les variables de référence
- 6. Comment passer une référence const en C#?
- 7. Comment passer des valeurs par référence dans l'objectif C (iphone)
- 8. Meilleur moyen de passer par référence de C# à C++?
- 9. Comment passer un tableau par référence à une fonction?
- 10. Newlines en Javascript et PHP5
- 11. ASH référence indirecte variable
- 12. variable de référence
- 13. Actionscript - Variable Affectation sans référence?
- 14. C++/CLI de référence variable
- 15. Passer la liste d'arguments variable à sprintf()
- 16. Passer une variable personnalisée à l'API PayPal
- 17. quand passer les arguments de fonction par référence et quand par adresse?
- 18. asp.net - C# Variable de session en cours de modification par référence?
- 19. Renvoyer la référence à la variable locale statique en C++
- 20. comment passer une variable entre deux viewcontroller?
- 21. Convertir le type par référence C# en le type correspondant non par référence
- 22. Variable d'application des formulaires de référence.
- 23. Les méthodes d'extension C# ne permettent-elles pas de passer des paramètres par référence?
- 24. 'passe paramètre par référence' dans Ruby?
- 25. Multiplier variable par une autre variable?
- 26. pourquoi php se plaint de passer par référence dans ce code?
- 27. compiler les en-têtes php4 au lieu de php5
- 28. Comment passer une référence de méthode à une méthode différente en C#
- 29. Comment passer les arguments à la fonction référencée par la variable
- 30. Passer des types de variable si mod-réécrire
Le comportement de Java est identique à celui de PHP (objets passés par référence, primitives passées ["copiées"] par valeur), comme je crois, C++. De quelles langues fortement typées parlez-vous? –
Java ne * passe * pas les objets par référence; il copie la valeur d'une référence d'objet; voir http://stackoverflow.com/questions/40480/is-java-pass-by-reference. – Rob
Assez juste. Sur la base de l'exemple de laurentb ci-dessous, il semblerait que vous puissiez dire la même chose à propos de PHP, ce qui ne fait que renforcer mon argument: la façon dont les arguments sont passés en PHP et Java sont presque indiscernables. J'attends toujours un exemple de "langage fortement typé" qui copie les objets passés en arguments. –