Passagem por Referência
Parte da seção Lógica & Fluxo do Journey de PHP da Coddy. Lição 7 de 68.
Por padrão, quando você passa uma variável para uma função em PHP, a função recebe uma cópia do valor dessa variável. Isso significa que quaisquer alterações feitas dentro da função não afetam a variável original fora da função.
No entanto, às vezes você quer que uma função modifique a variável original diretamente. É aí que entra a passagem por referência. Ao adicionar um e comercial (&) antes do nome do parâmetro na definição da sua função, você instrui o PHP a passar a variável real em vez de uma cópia:
<?php
function doubleValue(&$number) {
$number = $number * 2;
}
$value = 10;
doubleValue($value);
echo $value; // Saída: 20
?>Observe como $value mudou de 10 para 20, embora não tenhamos retornado nada da função. O parâmetro &$number cria um vínculo direto com a variável original $value, permitindo que a função a modifique diretamente.
Esta técnica é particularmente útil quando você precisa que uma função modifique várias variáveis ou quando trabalha com estruturas de dados grandes, nas quais fazer cópias seria ineficiente.
Desafio
FácilCrie uma função chamada updateInventory que receba três parâmetros: uma referência a uma variável de quantidade, uma quantidade a adicionar e uma quantidade a remover. A função deve modificar a quantidade original adicionando a primeira quantidade e subtraindo a segunda.
Você receberá três entradas: a quantidade inicial, a quantidade a adicionar e a quantidade a remover. Leia as três entradas, crie uma variável com a quantidade inicial, chame a função updateInventory passando a quantidade por referência juntamente com as quantidades a adicionar e a remover e imprima a quantidade atualizada.
Formato da entrada: Três linhas — a primeira linha contém a quantidade inicial (um número), a segunda linha contém a quantidade a adicionar (um número) e a terceira linha contém a quantidade a remover (um número)
Saída esperada: A quantidade atualizada após a adição e a remoção
Experimente você mesmo
<?php
// Ler entradas
$initialQuantity = intval(fgets(STDIN));
$amountToAdd = intval(fgets(STDIN));
$amountToRemove = intval(fgets(STDIN));
// Criar variável quantity
$quantity = $initialQuantity;
// TODO: Crie a função updateInventory aqui que recebe um parâmetro por referência
// TODO: Chame a função updateInventory com a quantity por referência
// Exibir a quantity atualizada
echo $quantity;
?>Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica & Fluxo
1Funções Avançadas
Funções AnônimasClosures e 'use'Arrow FunctionsFunções de CallbackUsando 'call_user_func'Funções VariáveisPassagem por ReferênciaFunções RecursivasRecapitulação: Mix de Funções4Arrays Multidimensionais
Criando um Array 2DAcessando Elementos de um Array 2DModificando Elementos de um Array 2DIterando com Loops AninhadosArrays Associativos 2DRecapitulação: Exercício de Grade Simples2Manipulações Avançadas de Arrays
Adicionando com 'array_push'Removendo com 'array_pop'Adicionando com 'array_unshift'Removendo com 'array_shift'Mesclando Arrays IndexadosMesclando Arrays AssociativosExtraindo com 'array_slice'Valores com 'in_array'Chaves com 'array_search'Recapitulação: Exercício de Playlist3Ordenação de Arrays
Ordenar Arrays Indexados (Crescente)Ordenar Arrays Indexados (Decrescente)Ordenar Arrays Associativos por ValorOrdenar Arrays Associativos por ChaveOrdenação por Ordem NaturalOrdenação Personalizada com 'usort'Recapitulação: Ordenação de LeaderboardPratique por conta própria: Compilador de PHP online