Paso de Parámetros por Valor y Referencia en PHP

Ronaldo B.1 de agosto de 20225 min de lectura

En este artículo

En este artículo aprenderemos en detalle cuál es la diferencia entre el paso de parámetros por valor y por referencia en PHP 7.

Valor vs Referencia

1 - Valor. Cuando realizamos un paso de parámetros basado en el valor, significa que una función realizará sus operaciones basándose en el valor del parámetro informado. En otras palabras, el valor informado se alterará solo en el ámbito de la función. Esta es la manera estándar de que PHP acepte parámetros.

2 - Referencia. Cuando realizamos un paso de parámetros basado en la referencia, significa que una función realizará sus operaciones basándose en la referencia original del parámetro. En otras palabras, si informamos una variable a una función, el valor de esa variable se alterará en el ámbito global. Para realizar este paso, simplemente hay que agregar un & (“Y” comercial) antes del parámetro informado.

¿Qué te parece si desarrollamos un ejemplo práctico para entender mejor esta diferencia?

Primer Ejemplo

Crearemos una función que añadirá un texto a una cadena existente. Llamaremos a esta función addNameToString(). Su script será el siguiente:

function addNameToString($string) {

   $string .= ' - Nuevo Nombre';

   return $string;

}

Explicando: esta función esperará una cadena como parámetro. Añadirá un nuevo texto a esta cadena y luego la retornará con su nuevo valor. Para probar si funciona, vamos a crear una variable antes de ella que contendrá un nombre y luego la informaremos como parámetro para la función. El código final será así:

<?php

$name = 'Hcode';

function addNameToString($string) {

	$string .= ' - Nuevo Nombre';

	return $string;

}

echo addNameToString($name);

echo '<br/>';

echo $name;

Hemos creado la variable $name, la informamos a la función addNameToString() junto con el constructor echo, para ya mostrar el valor retornado por la función en el navegador. Debajo de esto rompemos una línea con la etiqueta
y definimos otro echo para ver cuál es el valor original de la variable. Vamos a probar este código en el navegador. El resultado será el siguiente:

Resultado de nuestro código en el navegador.

La primera línea muestra nuestra variable con su valor alterado por la función. Sin embargo, observa que en la línea de abajo el valor original de la variable no ha cambiado, sigue siendo el mismo, ya que la función solo alteró el valor aislado de la variable $name.

Ahora vamos a desarrollar este mismo ejemplo, pero usando el paso de parámetros por referencia. Como aprendimos arriba, simplemente hay que informar el & antes del parámetro $name en la función addNameToString(). Tu código será así:

function addNameToString(&amp;amp;$string) {

	$string .= ' - Nuevo Nombre';

	return $string;

}

Observa que la sintaxis no ha cambiado mucho. ¿Cuál será el resultado de este cambio en nuestro navegador? Cuando actualizamos la página, vemos lo siguiente:

Resultado de nuestro código en el navegador.

Ahora las dos líneas retornan el valor alterado por la función. Es decir, la variable $name ha tenido su valor realmente alterado, ya que la función trabajó no con un valor aislado, sino con la referencia del parámetro, con la variable $name en sí. Sensacional, ¿no crees? Podemos concluir así que al pasar un parámetro por valor, es como si sacáramos una copia del contenido de una variable y la informáramos a la función de una manera separada. Pero, al pasar un parámetro por referencia, es como si informáramos a la función la variable entera. Podemos decir que PHP podrá "entender la referencia" ;).

Segundo Ejemplo

El paso de parámetros también puede ser muy utilizado en bucles de repetición. Vamos a desarrollar un ejemplo en este contexto.

Crearemos un array con algunos equipos de la NBA y recorreremos sus valores a través de un foreach(). El código final será así:

<?php

$nba_teams = ['Chicago Bulls', 'Los Angeles Lakers', 'Boston Celtics', 'New York Knicks'];

foreach ($nba_teams as $index => $team) {

	$team_number = $index + 1;

	$team = "#$team_number - $team";

	echo $team;

	echo "<br/>";

}

echo '<hr/>';

var_dump($nba_teams);

Explicación: hemos creado la variable $nba_teams, que es un array. Dentro de foreach(), que está recorriendo este array, cambiamos el valor de cada ítem, añadiendo un número frente a ellos, que será igual al índice del array más uno. Mostraremos cada nuevo valor dentro del foreach(). Al final del código definimos un var_dump(), que mostrará los valores del array original. Entre ellos habrá una etiqueta


, que creará una línea de separación, facilitando nuestra visualización. Vamos a ejecutar este código en nuestro navegador. El resultado será el siguiente:

Resultado de nuestro código en el navegador.

Observamos en las primeras líneas que los nombres de los equipos han sido alterados, añadiendo un número antes de ellos. Sin embargo, en la última línea, vemos que el valor original permanece. Ahora vamos a alterar el foreach() al concepto de parámetros por referencia, siguiendo el mismo patrón del ejemplo anterior. Nuestro bucle de repetición será así:

foreach ($nba_teams as $index => &amp;amp;$team) {

	$team_number = $index + 1;

	$team = "#$team_number - $team";

	echo $team;

	echo "<br/>";
}

El & se ha añadido a la variable $team, que representa el nombre de cada equipo, y que será realmente alterada. El resultado en el navegador será este:

Resultado de nuestro código en el navegador.

Nota que ahora tanto los valores en el bucle de repetición como también en el array original han sido alterados, debido a la referencia que informamos para el foreach().

Esperamos que estos dos ejemplos te hayan ayudado a entender un poco mejor la diferencia entre el paso de parámetros por valor y por referencia. Si te gustó este contenido, te pedimos que, por favor, lo compartas con otras personas, para que ellas también puedan tener acceso a este consejo.

Si deseas aprender más sobre PHP, puedes consultar nuestro Curso Completo de PHP 7 y convertirte en un verdadero especialista en este lenguaje sensacional.

¡Hasta el próximo artículo!

Sigue aprendiendo con Hcode

Regístrate en la plataforma de cursos y sigue las próximas guías del blog.