Comencemos con algunos conceptos básicos. En PHP, algo como hello
evaluará a la cadena "hello"
. Para hacer referencia a una variable, puede usar esta sintaxis: ${expr}
. También hay una abreviatura para esto, $foo
, que aproximadamente evaluará a esto: ${"foo"}
.
Además, probablemente sepa que puede asignar múltiples variables a la vez: $a=$b=$c='hello';
, por ejemplo. Esto asignará $a
, $b
y $c
a 'hello'
. Esto en realidad se representa como $a=($b=($c='hello')));
. $foo=value
es una expresión que, después de establecer $foo
, evaluará a value
.
Su estado de código es el siguiente:
echo ${!${!1}=ReturnArray()}['a'];
El primero que hace, obviamente, es llamar a ReturnArray
. A continuación, evalúa !1
, que se evalúa como falso. El ${!1}
por lo tanto hace una variable con el nombre false
, aunque no es una cadena (?!). Después de eso, aplica una operación no a la matriz. Todas las matrices no vacías son verdaderas, por lo que la operación no lo cambia a false
. Luego usa esa sintaxis ${}
nuevamente para recuperar la variable llamada false
. A continuación, utiliza un acceso de matriz para recuperar el valor en la matriz para la clave 'a'
.
Espero que tenga sentido.
Ganador del premio PHP esotérica es para ... ¿Qué – Dan
las respuestas parecen faltar es que esto es una solución por el hecho de que 'function() [subscript]' es en realidad (y me gustaría estar inventando esto) un * error de sintaxis * en PHP. –