-
D- 2foo(1) =
-
Alguém explica?
-
O echo funciona como ultimo membro de saída. ou seja quando processado a saída e por ele.
logo quando e pedido para mostrar uma string concatenado com uma função as funções são processadas primeiro.
<?php
function foo($arg){
echo $arg + 1;
}
$var = 1;
echo "foo($var) = "; //output foo(1) =
echo foo($var); //output 2
foo($var); //output 2 (ja que a função faz um echo)
echo "foo($var) = " . foo($var); //output 2foo(1) =
echo foo($var) . "foo($var) = "; //output 2foo(1) =
echo "foo($var) = foo($var)"; //output foo(1) = foo(1)
Pode testar o alga aqui
http://phptester.net/
-
a function foo não devolve valores (sem instrução return) e não altera o valor do parâmetro.
a única coisa que essa função faz é "printar" o valor do parâmetro acrescido de um.
Além disso, a função foo só está sendo chamada uma vez e antes desse echo!
Assim, a função foo é executada antes deste echo
echo "foo($var) = " . foo($var);
Portanto, a saída/resposta começa por (echo $var+1;).
Em seguida, $var é substituído por 1 em "foo($var) = "
foo($var); não concatena nada pois não tem return;
logo 2foo(1) =
-
Pegadinha master nessa questão. O examinador estava inspirado.
Para não errar, precisamos resolvê-la bem passo a passo, pois assim enxergaremos a ordem exata de execução de cada trecho do código.
Vamos a resolução:
1) Para que o comando
echo "foo($var) = " . foo($var);
Seja executado, primeiro precisamos resolver a chamada a função foo($var).
2) Ao executar a função foo($var), é executado o comando
echo $arg + 1
Que imprime na tela a string "2".
Em seguida a função termina SEM RETORNAR NADA
3) Agora sim o comando
echo "foo($var) = " . foo($var);
Pode ser executado, pois a chamada a função foo($var) já foi resolvida.
Como a função foo não tinha retorno, o resultado da concatenação de "foo($var) = ". foo($var) é apenas "foo($var) = ", que resulta em: "foo(1) = "
4) Só que antes, já havia sido impressa na tela a string "2" (passo 2). Portanto, o resultado final impresso na tela é:
"2foo(1) = "
Resposta: D
Prof. Mateus Gregório