Considere o código PHP a seguir: ...
<?php
function a($v){
$v=2*$v;
}
function b(&$v){
$v=2*$v;
}
$v=5;
a($v);
echo $v . " e ";
b($v);
echo $v;
?>
Ao executar este código será exibido
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: D - 5 e 10
A questão aborda o conceito de passagem de parâmetros em funções no contexto da linguagem de programação PHP. Existem duas maneiras de passar parâmetros para uma função em PHP: por valor e por referência. O conhecimento sobre esses dois métodos é essencial para entender a saída do código apresentado.
A função a($v) recebe o parâmetro por valor, o que significa que a função trabalha com uma cópia do valor passado, e quaisquer mudanças feitas ao parâmetro dentro da função não afetam a variável original. No caso, a função dobra o valor de $v, mas como é passada por valor, a variável externa $v não é modificada.
Em contraste, a função b(&$v) recebe o parâmetro por referência, como indicado pelo símbolo & antes do parâmetro $v. Isso significa que a função opera diretamente sobre a variável original, e qualquer alteração no parâmetro dentro da função afetará diretamente a variável externa $v. Assim, quando b($v) é chamada, ela dobra o valor da variável original $v.
Portanto, ao executar o código:
- A variável $v é inicialmente definida como 5.
- A função a($v) é chamada, mas não altera o valor de $v externamente, então $v ainda é 5.
- O primeiro echo imprime 5 e um espaço seguido da palavra "e".
- Em seguida, a função b($v) é chamada, dobrando o valor de $v para 10, pois a alteração é feita por referência.
- O segundo echo imprime o valor atual de $v, que é 10.
Assim, a saída final será 5 e 10, justificando a alternativa D como a correta.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
Os PARÂMETROS podem ou não ser modificados DENTRO da função. Quando colocamos o símbolo “&” antes do parâmetro, estamos passando o parâmetro por “REFERÊNCIA”. Desta forma, qualquer alteração no parâmetro DENTRO da função, irá refletir no parâmetro FORA da função.
Porém, quando não usamos o símbolo “&”, estamos passando o parâmetro por “CÓPIA”, e qualquer alteração DENTRO da função, NÃO irá refletir FORA do mesmo.
Fonte Provas de TI
O PHP é em grande parte inspirado no C, sabendo disso dava pra ver que o parâmetro com & seria passado por referência. Faltou um pouco de malícia pra banca, porque mesmo que ambos os casos duplicassem a resposta seria 10 e 20, e não existia essa opção;
d-
Apesar de a function() processar o parametro * 2, a variavel que é passada como parâmetro nao sera alterada. Além disso, o resultado da função nao é exibido no echo porque esta faltando return.
Quando se usa &, a função esta mexendo com o valor da variavel no endereço de memoria, alterando o valor que la esta armazenado. Logo, o echo sera sempre o valor atual cada vez que usar function (&$v);
Gloomy: "..... Além disso, o resultado da função nao é exibido no echo porque esta faltando return. "
Cuidado com a afirmação. Em momento algum houve echo no retorno a chamada da função.
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo