Paso por referencia
Parte de la sección Lógica y Flujo del Journey de PHP de Coddy. Lección 7 de 68.
De forma predeterminada, 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 directamente la variable original. Aquí es donde entra en juego el paso por referencia. Al añadir un ampersand (&) 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; // Imprime: 20
?>Observa cómo $value cambió de 10 a 20 aunque no devolvimos nada de la función. El parámetro &$number crea un vínculo directo con la variable original $value, lo que permite que la función la modifique directamente.
Esta técnica es particularmente útil cuando necesitas que una función modifique más de una variable o cuando trabajas con estructuras de datos grandes en las que copiar sería ineficiente.
Desafío
FácilCrea una función llamada updateInventory que acepte tres parámetros: una referencia a una variable de cantidad, una cantidad que añadir y una cantidad que retirar. La función debe modificar la cantidad original sumando la primera cantidad y restando la segunda.
Recibirás tres entradas: la cantidad inicial, la cantidad que añadir y la cantidad que retirar. 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 que añadir y retirar, 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 que añadir (un número) y la tercera línea contiene la cantidad que retirar (un número)
Salida esperada: La cantidad actualizada después de sumar y restar
Pruébalo tú mismo
<?php
// Leer entradas
$initialQuantity = intval(fgets(STDIN));
$amountToAdd = intval(fgets(STDIN));
$amountToRemove = intval(fgets(STDIN));
// Crear la variable quantity
$quantity = $initialQuantity;
// TODO: Crea la función updateInventory aquí que tome un parámetro por referencia
// TODO: Llama a la función updateInventory con la quantity por referencia
// Mostrar la quantity 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ónPractica por tu cuenta: Compilador de PHP online