Maison  >  Article  >  développement back-end  >  Que signifie le passage de valeur en php

Que signifie le passage de valeur en php

青灯夜游
青灯夜游original
2023-01-28 18:41:093586parcourir

En PHP, transmettre une valeur signifie copier les paramètres réels lors de l'appel d'une fonction, puis les transmettre aux paramètres formels de la fonction. En fait, les paramètres formels et les paramètres réels occupent respectivement des unités de stockage différentes. La caractéristique du transfert de valeur est un transfert unidirectionnel, c'est-à-dire que lorsque la fonction appelante est appelée, une unité de stockage est allouée au paramètre formel et la valeur du paramètre réel est transmise au paramètre formel une fois l'appel terminé. , l'unité de stockage du paramètre formel est libérée et la valeur du paramètre formel est. Toute modification n'affectera pas la valeur du paramètre réel, et l'unité de stockage du paramètre réel conserve et maintient la valeur inchangée.

Que signifie le passage de valeur en php

L'environnement d'exploitation de ce tutoriel : système Windows7, version PHP8, ordinateur DELL G3

Lors de l'appel d'une fonction, vous devez transmettre des paramètres à la fonction. Les paramètres passés dans la fonction sont appelés paramètres réels, et. les paramètres définis par la fonction sont appelés est un paramètre formel. Il existe quatre façons de transmettre des paramètres à une fonction, à savoir le passage par valeur, le passage par référence, les paramètres par défaut et les paramètres de longueur variable.

Passage de valeur

Le passage de valeur est la méthode de passage de valeur par défaut pour les fonctions en PHP, également connue sous le nom de "passage de copie 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.

La caractéristique du transfert de valeur est le transfert unidirectionnel, c'est-à-dire que lorsque la fonction appelante est appelée, une unité de stockage est allouée au paramètre formel et la valeur du paramètre réel est transmise au paramètre formel après le. L'appel est terminé, l'unité de stockage du paramètre formel est libérée et le paramètre formel est. Toute modification de la valeur du paramètre n'affectera pas la valeur du paramètre réel, et l'unité de stockage du paramètre réel conserve et maintient toujours la valeur inchangée. .

【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 :

Que signifie le passage de valeur en php

Vous pouvez voir sur les résultats d'exécution qu'au sein de la fonction, les valeurs​​sont effectivement échangées, mais en dehors de la fonction, les valeurs​​ne le sont pas changement. 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 opérer sur des paramètres externes de la fonction, vous devez utiliser le passage de références.

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 la même adresse mémoire. , donc la fonction a L'opération 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 :

Que signifie le passage de valeur en php

La différence entre le passage de valeur et le passage de référence en php

Transmission de valeur : dans la portée de la fonction, changer la valeur de la variable n'affectera pas l'extérieur de la valeur de la variable de fonction.

Passage par référence : Dans le cadre d'une fonction, toute modification de la valeur est également reflétée en dehors de la fonction, car le passage par référence transmet l'adresse mémoire.

Tapez deux morceaux de code et vous pourrez voir la différence entre les deux. Regardons l'essence à travers le phénomène

function sum($a){
  $a++;
  $b = $a;
  return $b;
}
$a = 10;
echo sum($a).&#39;<br />&#39;;//11
echo $a;//10
function sum(&$a){
  $a++;
  $b = $a;
  return $b;
}
$a = 10;
echo sum($a).&#39;<br />&#39;;//11
echo $a;//11

La différence entre les deux morceaux de code réside dans les paramètres de la fonction sum One est de passer le. valeur $a, et l'autre est de passer la référence& $a, le résultat est que la valeur de $a ne change pas après le passage de la valeur, au contraire, la valeur de $a change après le passage de la référence. Les enfants qui ont appris le langage C ici comprendront ce qui se passe. Ce qui est poussé sur la pile est une copie de la référence.

Puisque la référence pointe vers une certaine variable, l'opération sur la référence est en fait l'opération sur la variable vers laquelle elle pointe. (La fonction revient à passer un pointeur, sauf qu'il n'est pas nécessaire de déréférencer) & est un symbole pointant vers une certaine adresse de variable. Le paramètre formel &$a dans la somme de la fonction est en fait le paramètre réel $a, donc. passez-le en somme et effectuez un + Après l'opération +, la valeur du paramètre réel $a change réellement, c'est tout.

Explication :

La valeur du paramètre d'origine dans le passage par valeur reste la valeur d'origine après l'appel d'autres fonctions, tandis que le passage par référence modifie la valeur d'origine. Lors de la transmission de valeurs selon la méthode de transmission par valeur, si la valeur d'origine doit être modifiée, le code doit être copié. Si la valeur est suffisamment grande ou s'il s'agit d'une grande chaîne de chaînes, le code sera plus. et plus répétitif, en passant par référence, il n'est pas nécessaire de copier le code PHP, ce qui présente un grand avantage dans l'amélioration des performances.

Pour plus de connaissances sur PHP, veuillez visiter le site Web chinois 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