Skip to content

Instantly share code, notes, and snippets.

@rsporteman
Last active October 22, 2019 23:04
Show Gist options
  • Save rsporteman/f68143af20d92f4e12536fce7b7581d7 to your computer and use it in GitHub Desktop.
Save rsporteman/f68143af20d92f4e12536fce7b7581d7 to your computer and use it in GitHub Desktop.
PHP Exercicios

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';

Respostas

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 $saudacao = 'ola', a variavel $$saudacao ira obtar o valor da variavél $ola que será igual a 'mundo',

De forna anologa a variavél $Brasil obterá seu valor da variavel $$pais, isso é defino em $pais = "Brasil" seguido de $$pais = "Portgual"

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';

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment