Paso por referencia
Parte de la sección Lógica y Flujo del Journey de PHP de Coddy — lección 7 de 68.
Por defecto, cuando pasas una variable a una función en PHP, la función recibe una copia del valor de esa variable. Esto significa que cualquier cambio realizado dentro de la función no afecta a la variable original fuera de la función.
Sin embargo, a veces quieres que una función modifique la variable original directamente. Aquí es donde entra en juego el paso por referencia. Al agregar un signo de unión (&) antes del nombre del parámetro en la definición de tu función, le indicas a PHP que pase la variable real en lugar de una copia:
<?php
function doubleValue(&$number) {
$number = $number * 2;
}
$value = 10;
doubleValue($value);
echo $value; // Salida: 20
?>Observa cómo $value cambió de 10 a 20 aunque no devolvimos nada de la función. El parámetro &$number crea un enlace directo a la variable $value original, permitiendo que la función la modifique directamente.
Esta técnica es especialmente útil cuando necesitas que una función modifique múltiples variables o cuando trabajas con estructuras de datos grandes donde realizar copias sería ineficiente.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Desafío
FácilCrea una función llamada updateInventory que reciba tres parámetros: una referencia a una variable de cantidad, una cantidad para añadir y una cantidad para eliminar. La función debe modificar la cantidad original sumando la primera cantidad y restando la segunda cantidad.
Recibirás tres entradas: la cantidad inicial, la cantidad a añadir y la cantidad a eliminar. Lee las tres entradas, crea una variable con la cantidad inicial, llama a la función updateInventory pasando la cantidad por referencia junto con las cantidades de adición y eliminación, e imprime la cantidad actualizada.
Formato de entrada: Tres líneas - la primera línea contiene la cantidad inicial (un número), la segunda línea contiene la cantidad a añadir (un número), la tercera línea contiene la cantidad a eliminar (un número)
Resultado esperado: La cantidad actualizada después de añadir y eliminar
Hoja de referencia
Por defecto, PHP pasa las variables a las funciones por valor (una copia). Para modificar la variable original, utiliza el paso por referencia añadiendo un ampersand (&) antes del nombre del parámetro:
<?php
function doubleValue(&$number) {
$number = $number * 2;
}
$value = 10;
doubleValue($value);
echo $value; // Salida: 20
?>El parámetro &$number crea un enlace directo a la variable original, lo que permite a la función modificarla sin devolver un valor. Esto es útil para modificar múltiples variables o trabajar con grandes estructuras de datos de forma eficiente.
Pruébalo tú mismo
<?php
// Leer entradas
$initialQuantity = intval(fgets(STDIN));
$amountToAdd = intval(fgets(STDIN));
$amountToRemove = intval(fgets(STDIN));
// Crear la variable de cantidad
$quantity = $initialQuantity;
// TODO: Crear la función updateInventory aquí que tome un parámetro por referencia
// TODO: Llamar a la función updateInventory con la cantidad por referencia
// Imprimir la cantidad actualizada
echo $quantity;
?>Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y Flujo
1Funciones avanzadas
Funciones anónimasClosures y 'use'Funciones de flechaFunciones callbackUso de 'call_user_func'Funciones variablesPaso por referenciaFunciones recursivasResumen: Miscelánea de funciones4Arreglos multidimensionales
Crear un arreglo 2DAcceder a elementos de un arreglo 2DModificar elementos de un arreglo 2DIterar con bucles anidadosArreglos asociativos 2DResumen: Ejercicio de cuadrícula simple2Manipulación avanzada de arrays
Agregar con 'array_push'Eliminar con 'array_pop'Agregar con 'array_unshift'Eliminar con 'array_shift'Fusionar arrays indexadosFusionar arrays asociativosExtraer con 'array_slice'Valores con 'in_array'Claves con 'array_search'Resumen: Ejercicio de Playlist3Ordenar Arrays
Ordenar arrays indexados de forma ascendenteOrdenar arrays indexados de forma descendenteOrdenar arrays asociativos por valorOrdenar arrays asociativos por claveOrdenación por orden naturalOrdenación personalizada con 'usort'Resumen: Ordenar tablas de clasificación