Na resolução das questões considerar PHP 7 ou mais recente.
Determine o output php no terminal dos trechos de código abaixo.
if("um" == 0){
echo "Verdadeiro";
} else {
echo "Falso";
}
echo '6'.(print '4')+2;
echo isset($a) ? 'A existe' : ($a = 'a') . ' agora existe';
$p = "PHP";
$P = "php";
echo ($p < $P) + 2 * ($p > $P) + 3 * ($p == $P);
$saudacao = "ola";
$ola = "mundo";
$pais = "Brasil";
$$pais = "Portugal";
echo $$saudacao." ".$Brasil;
if("0"){
echo "Verdadeiro";
} else {
echo "Falso";
}
echo true ? 'verdadeiro' : false ? 'v' : 'f';
Verdadeiro
Como a comparação é entre uma string e um inteiro o type hiting do php convertera a string para um inteiro antes da comparação, resultando neste caso em (0 == 0) portanto verdadeiro.
463
O código entre parenteses é executado primeiro (print '4') imprimindo o 4, seguindo a concatenação com o 6 resultando em 46, por último temos o retorno do print que é 1 (4 exibido com sucesso) que é somado com 2, resultado em 463,
a agora existe
O isset($a) retorna false, pois $a não existe. Então o operador ternário executa o código após os dois pontos (:), atribuindo um valor para $a, imediatamente exibindo-o em decorrência do echo inicial.
1
A conversão é realizada considerando o código ASCII dos caracteres, mais especificamente do primeiro (que é o mais significativo). Atente-se que a variável minúscula $php é quem recebe o valor em maiúsculo e vice-versa, sendo que os caracteres maiúsculos vem antes na tabela ASCII e consequentemente tem um número menor associado,
mundo Portugal
A questão é sobre variáveis variáveis,
Por conta de na primeira linha termos o trecho
De forna anologa a variavél
Falso
A string "0" resultará sempre como falsa, mesmo com declare(strict_types=1), isso pois o php vai executar o boolval("0") e receberá false;
v
Perceba que nesse exemplo estamos avaliando operadores ternários aninhados. O desenvolvedor é induzido a resolver a expressão à direita (false ? 'v' : 'f') que resultaria em 'f' já que a condição é falsa) e posteriormente executaria o teste restante mais a esquerda (true ? 'verdadeiro' : 'f'), resultando em 'verdadeiro'.
Mas os operadores ternários tem um comportamento diferenciado e são avaliados da esquerda para a direita.
A ordem correta é:
Primeira avaliação: true ? 'verdadeiro' : false que resulta em 'verdadeiro' Substituindo ficaria:
echo 'verdadeiro' ? 'v' : 'f'
Portanto (boolean)' verdadeiro' é true booleano então o resultado é 'v'
Uma releitura mais clara seria:
echo (true ? 'verdadeiro' : false) ? 'v' : 'f';