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 no 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ê deseja que uma função modifique a variável original diretamente. É aqui 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ê diz ao PHP para 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 link direto para a variável $value original, permitindo que a função a modifique diretamente.
Esta técnica é particularmente útil quando você precisa que uma função modifique múltiplas variáveis ou ao trabalhar com grandes estruturas de dados onde a cópia seria ineficiente.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Desafio
FácilCrie uma função chamada updateInventory que receba três parâmetros: uma referência para uma variável de quantidade, um valor para adicionar e um valor para remover. A função deve modificar a quantidade original adicionando o primeiro valor e subtraindo o segundo valor.
Você receberá três entradas: a quantidade inicial, o valor a ser adicionado e o valor a ser removido. Leia as três entradas, crie uma variável com a quantidade inicial, chame a função updateInventory passando a quantidade por referência junto com os valores de adição e remoção, e imprima a quantidade atualizada.
Formato de entrada: Três linhas - a primeira linha contém a quantidade inicial (um número), a segunda linha contém o valor a adicionar (um número), a terceira linha contém o valor a remover (um número)
Saída esperada: A quantidade atualizada após a adição e a remoção
Folha de consulta
Por padrão, o PHP passa variáveis para funções por valor (uma cópia). Para modificar a variável original, use a passagem por referência adicionando um e comercial (&) antes do nome do parâmetro:
<?php
function doubleValue(&$number) {
$number = $number * 2;
}
$value = 10;
doubleValue($value);
echo $value; // Saída: 20
?>O parâmetro &$number cria um link direto para a variável original, permitindo que a função a modifique sem retornar um valor. Isso é útil para modificar múltiplas variáveis ou trabalhar com grandes estruturas de dados de forma eficiente.
Experimente você mesmo
<?php
// Ler entradas
$initialQuantity = intval(fgets(STDIN));
$amountToAdd = intval(fgets(STDIN));
$amountToRemove = intval(fgets(STDIN));
// Criar variável de quantidade
$quantity = $initialQuantity;
// TODO: Criar a função updateInventory aqui que recebe um parâmetro por referência
// TODO: Chamar a função updateInventory com a quantidade por referência
// Exibir a quantidade 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 Leaderboard