2010-07-15 32 views

Respuesta

2

Algunas cosas no son sólo posibles con las funciones normales, considere este fragmento:

list($el1, $el2) = array('el1', 'el2');

Lo que hace es que toma los elementos de una matriz no asociativo y asigna los valores de las variables definidas en el constructo list().

Simplemente no se puede hacer con las funciones :)

Un ejemplo más sutil es isset y empty. Aunque parecen funciones, una cosa no es posible solo con las funciones: no generan avisos de "variable no definida" o "índice indefinido".

+0

Puede volver a implementar 'empty' con' isset': 'función vacía (& $ var) {return! Isset ($ var) || ! $ var; } ' – Gumbo

+0

@Gumbo: por supuesto, pero aún necesita el constructo isset() –

6

Las construcciones de lenguaje son las que componen el lenguaje: cosas como "si" "para" "mientras" "función" y así sucesivamente.

Las menciones en el manual de PHP de cosas como "echo", "die" o "return" están ahí para dejar en claro que estas NO son funciones y que no siempre se comportan como funciones.

Puede llamar a "echo" como "echo()" por lo que puede confundir a los principiantes. Es por eso que ponen la desinfección clara en el manual. Para que quede absolutamente claro para todos.

Otros ejemplos de construcciones de lenguaje que pueden confundirse con funciones son "array()", "list()" y "each()".

+2

Desafortunadamente, la descripción de sintaxis de construcciones de lenguaje en el manual de PHP también es confusa. Solo eche un vistazo a la de 'echo': dice' void echo (string $ arg1 [, string $ ...]) 'pero' echo ($ arg1, $ arg2); 'no es válido. – Gumbo

4

No todo el lenguaje puede ser funciones. Debe haber alguna base, en alguna parte, en la que implemente esas primeras funciones. Los elementos de esta base son las construcciones del lenguaje (alternativamente, integradas). No siempre se comportan como lo hacen las funciones "normales".

16

Las construcciones de lenguaje están codificadas en el lenguaje PHP. No juegan según las reglas normales.

Por ejemplo, cada vez que intente acceder a una variable que no existe, obtendrá un error. Para probar si existe una variable antes de acceder a ella, es necesario consultar a isset o empty:

if (isset($foo)) 

Si isset era una función normal, se obtendría una advertencia allí también, ya que está accediendo a $foo pasarlo a la función isset. Sin embargo, dado que isset es una construcción de lenguaje, funciona sin lanzar una advertencia. Es por eso que la documentación hace una clara distinción entre funciones normales y construcciones de lenguaje.

0

construcciones de lenguaje pueden ser formado en más de una forma y tiene un retorno de valor

print("asdf"); es tan posible como print "asdf"; y volverán 1.

echo("asdf"); es igual a echo "asdf;" pero no tiene retorno-valor .

die("asdf"); es igual a exit("asdf"); y no tiene un valor de retorno demasiado.

3

Para entender la respuesta a esta pregunta, debe comprender cómo funcionan los analizadores. Un lenguaje se define por sintaxis y la sintaxis se define a través de palabras clave.

Las construcciones de lenguaje son piezas de código que constituyen la base del lenguaje PHP. El analizador los trata directamente en lugar de funciones.

Cuestiones relacionadas