Considere o código PHP a seguir:                            ...

Próximas questões
Com base no mesmo assunto
Q583595 Programação
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 
Alternativas

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