Questão nº 40
Questão de Tecnologia da Informação · CESGRANRIO BASA 02/2021 (nº 40)
Considere o seguinte fragmento de código em PHP.
<?php
$var = 2;
function primeira(&$var) { $var++;}
function segunda($var) { $var++;}
function terceira() { $var++;}
echo $var;
primeira($var); echo $var;
segunda($var); echo $var;
terceira($var); echo $var;
?>
Qual será a saída gerada pelo fragmento de código aci-
ma?
- A2222
- B2234
- C2333 (alternativa correta)
- D2334
- E2344
Resposta comentada
Gabarito Alternativa C
Conceito-chave: Em PHP, & na declaração da função significa passagem por referência (a função altera a variável original), enquanto sem & é passagem por valor (a função trabalha com uma cópia). Além disso, uma função sem parâmetro declarado não enxerga variáveis globais automaticamente.
- (A) Incorreta: Assumiria que
terceira()incrementa a variável global, mas semglobal $varou$GLOBALS, ela usa uma variável local inexistente (não altera nada). - (B) Incorreta: Aplicaria incremento em
terceira(), mas ela não recebe referência nem declaraglobal, então não altera$var. - (C) Correta:
primeira(&$var)incrementa a original (2→3);segunda($var)incrementa uma cópia (original continua 3);terceira()não tem acesso à variável global, então nada muda (continua 3). Saída:2(echo inicial) +3+3+3=2333. - (D) Incorreta: Erra ao considerar que
segunda()outerceira()alteram a variável original, o que não ocorre. - (E) Incorreta: Somaria incrementos em todas as chamadas, ignorando a diferença entre valor, referência e escopo.
Armadilha da banca: O distrator mais tentador é a letra D (2334), pois o aluno acha que terceira() também incrementa, mas esquece que, sem global, a função cria uma variável local $var que não interfere na global. A pegadinha está em confundir escopo com passagem por referência: só primeira() tem o & que liga a função à variável original.
Fonte: CESGRANRIO BASA 02/2021 Técnico Científico - Tecnologia da Informação. Reproduzida para fins de estudo.