arênteses alterando a semântica do resultado da chamada de função
Foi observado emoutra pergunt que agrupar o resultado de uma chamada de função PHP entre parênteses pode de alguma forma converter o resultado em uma expressão completa, de forma que o seguinte funcione:
<?php
error_reporting(E_ALL | E_STRICT);
function get_array() {
return array();
}
function foo() {
// return reset(get_array());
// ^ error: "Only variables should be passed by reference"
return reset((get_array()));
// ^ OK
}
foo();
Estou tentando encontrar algo na documentação paraexplicitament e explique sem ambiguidade o que está acontecendo aqui. Diferente do C ++, eu não sei o suficiente sobre a gramática PHP e seu tratamento de instruções / expressões para derivá-l
Há algo oculto na documentação referente a esse comportamento? Caso contrário, alguém pode explicar isso sem recorrer à suposição?
AtualizaEu encontreithis EBNF pretendendo representar a gramática PHP e tentei decodificar meus scripts, mas acabou desistind
Então,usingphc
para gerar um.dot
arquivo dos doisfoo()
variantes, euproduzid Imagens AST para ambos os scripts usando os seguintes comandos:
$ yum install phc graphviz
$ phc --dump-ast-dot test1.php > test1.dot
$ dot -Tpng test1.dot > test1.png
$ phc --dump-ast-dot test2.php > test2.dot
$ dot -Tpng test2.dot > test2.png
Nos dois casos, o resultado foi exatamente o mesmo: