Maison  >  Article  >  développement back-end  >  Quelle est la différence entre transmettre une valeur et transmettre une adresse en php

Quelle est la différence entre transmettre une valeur et transmettre une adresse en php

青灯夜游
青灯夜游original
2021-11-29 18:14:173221parcourir

Différence : Passer une valeur signifie copier le contenu de la variable d'origine et l'enregistrer dans un nouvel espace mémoire. Les deux variables sont indépendantes l'une de l'autre. Le passage par référence (pass-by-reference) équivaut à donner un alias à la variable actuelle. En fait, les deux variables font référence à la même valeur, et modifier une variable affectera l'autre variable.

Quelle est la différence entre transmettre une valeur et transmettre une adresse en php

L'environnement d'exploitation de ce tutoriel : système Windows 7, PHP version 7.1, ordinateur DELL G3

Transmission de valeur

La transmission de valeur est la méthode de transmission de valeur par défaut pour les fonctions en PHP, également appelée "copie passant par valeur" . Comme son nom l'indique, la méthode de transmission de valeur copiera la valeur du paramètre réel, puis la transmettra au paramètre formel de la fonction, donc l'utilisation de la valeur du paramètre dans la fonction n'affectera pas les paramètres réels en dehors de la fonction. Par conséquent, si vous ne souhaitez pas que la fonction modifie la valeur du paramètre réel, vous pouvez le transmettre par valeur.

【Exemple】Ce qui suit définit une fonction simple. La fonction a deux paramètres, et les valeurs des paramètres sont échangées dans la fonction.

<?php
    function swap($a, $b){
        echo &#39;函数内,交换前 $a = &#39;.$a.&#39;, $b = &#39;.$b.&#39;<br>&#39;;
        $temp = $a;
        $a = $b;
        $b = $temp;
        echo &#39;函数内,交换后 $a = &#39;.$a.&#39;, $b = &#39;.$b.&#39;<br>&#39;;
    }
    $x = 5;
    $y = 7;
    echo &#39;函数外,交换前 $x = &#39;.$x.&#39;, $y = &#39;.$y.&#39;<br>&#39;;
    swap($x, $y);
    echo &#39;函数外,交换后 $x = &#39;.$x.&#39;, $y = &#39;.$y;
?>

Les résultats d'exécution sont les suivants :

函数外,交换前 $x = 5, $y = 7
函数内,交换前 $a = 5, $b = 7
函数内,交换后 $a = 7, $b = 5
函数外,交换后 $x = 5, $y = 7

Vous pouvez voir à partir des résultats d'exécution que les valeurs sont effectivement échangées au sein de la fonction, mais il n'y a aucun changement dans les valeurs en dehors de la fonction. On peut donc dire que passer une fonction par valeur revient simplement à transmettre une copie de la variable. Donc, si vous souhaitez que la fonction puisse fonctionner sur des paramètres réels en dehors de la fonction, vous devez utiliser le passage de références.

Passage d'adresse (passage par référence)

Le passage par référence consiste à copier l'adresse mémoire du paramètre réel, puis à la transmettre au paramètre formel de la fonction. Le paramètre réel et le paramètre formel pointent tous deux vers le même. Adresse mémoire, donc la fonction Le fonctionnement des paramètres formels affectera les paramètres réels en dehors de la fonction.

Passer par référence signifie passer l'adresse mémoire du paramètre réel au paramètre formel de la fonction. Par conséquent, les paramètres réels et les paramètres formels pointent vers la même adresse mémoire. À ce stade, toutes les opérations à l'intérieur de la fonction affecteront les valeurs des paramètres réels en dehors de la fonction. La méthode de passage par référence consiste à ajouter un symbole & sur la base du passage de valeur, comme indiqué ci-dessous :

function name (&参数1, &参数2, ..., &参数3) {
    ...    
}

[Exemple] Ajustez légèrement le code de l'exemple ci-dessus et utilisez la méthode de passage par référence pour transmettre les paramètres au fonction d'échange. Le code est le suivant Comme indiqué :

<?php
    function swap(&$a, &$b){
        echo &#39;函数内,交换前 $a = &#39;.$a.&#39;, $b = &#39;.$b.&#39;<br>&#39;;
        $temp = $a;
        $a = $b;
        $b = $temp;
        echo &#39;函数内,交换后 $a = &#39;.$a.&#39;, $b = &#39;.$b.&#39;<br>&#39;;
    }
    $x = 5;
    $y = 7;
    echo &#39;函数外,交换前 $x = &#39;.$x.&#39;, $y = &#39;.$y.&#39;<br>&#39;;
    swap($x, $y);
    echo &#39;函数外,交换后 $x = &#39;.$x.&#39;, $y = &#39;.$y;
?>

Les résultats d'exécution sont les suivants :

函数外,交换前 $x = 5, $y = 7
函数内,交换前 $a = 5, $b = 7
函数内,交换后 $a = 7, $b = 5
函数外,交换后 $x = 7, $y = 5

Apprentissage recommandé : "Tutoriel vidéo PHP"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn