precedência dos Operadores Lógicos do @PHP afeta os resultados das atribuições variáveis estranhamente
$var4 = 123;
function fn1($p1)
{
return array('p1' => 1, 'p2' => 2);
}
if ($var1 = fn1(1) AND $var4 == 123)
{
print_r($var1);
}
if ($var2 = fn1(1) && $var4 == 123)
{
print_r($var2);
}
if (($var3 = fn1(1)) && $var4 == 123)
{
print_r($var3);
}
Se você executar esse script simples, ele produzirá resultados estranhos, pelo menos para mim! Primeira saída da primeira, se a expressão resultar em uma matriz retornada da função e atribuída à variável $ var1, que é o que eu estou esperando, beSegunda saída do segundo se a expressão resultar em um número inteiro '1' atribuído à variável $ var2, o que NÃO é esperado !! Observe que a única coisa alterada é o operador lógico, usei '&&' em vez de 'AND', só isso !! Terceira saída da terceira se expressão resultará novamente a matriz esperada retornada da função e atribuída à variável $ var3, exatamente como a primeira expressão se, mas espere: acabei de abraçar a instrução de atribuição na expressão if entre colchetes, enquanto ainda estiver usando o segundo código de expressão ifAlguém pode explicar tecnicamente - em detalhes - por que esse comportamento estranho? Os links de referência do php.net serão apreciado
Sei que '&&' tem maior precedência que 'AND', mas isso não me explica !!