2010-08-30 11 views
5

Solo tengo curiosidad. En PHP, ¿por qué no se implementó echo como una función? ¿Por qué PHP no solo nos dio printf y nunca hablamos de echo? Tenga en cuenta que:En PHP, ¿por qué echo no se implementó como una función? (no echo vs. printf)

  • Esto no es una pregunta acerca de echo contra printf.
  • Ya sabía que echo es una construcción de lenguaje.

ACTUALIZACIÓN: Por cierto, ¿fue printf implementado usando echo?

+1

¿Por qué parece que la mayoría de las personas que intentan responder o bloquear esto ni siquiera han leído la pregunta por completo? –

+2

* (código fuente) * [HEAD revisión de formatted_print.c] (http://svn.php.net/viewvc/php/php-src/trunk/ext/standard/formatted_print.c?view=markup) – Gordon

Respuesta

0

Echo es una construcción de lenguaje. La función utiliza la construcción del lenguaje para hacer su trabajo. Explicando que no es exactamente mi especialidad, pero una acción de Google me llevó a este tema:

What is the difference between a language construct and a "built-in" function in PHP?

Algunos contenidos importantes:

...

Esta es la raíz de por qué no puede redefinir construcciones de lenguaje como echo o print: están efectivamente codificadas en el analizador, mientras que las funciones se asignan a un conjunto de construcciones de lenguaje y el analizador le permite cambiar esa asignación en compilación o tiempo de ejecución para sustituir su propio conjunto de construcciones de lenguaje o expresiones.

...

+0

Gracias. Lo he leído antes. Pero me da curiosidad por qué el equipo de PHP expuso 'echo', una construcción de lenguaje que rara vez veo en otro lenguaje de programación, en lugar de envolverlo en una función (IIRC, Python cambió' print' para funcionar en la versión 3). –

+2

@Hai Minh Nguyen: Bueno, no creo que Rasmus Lerdorf, Zeev Suraski o Andi Gutmans estén aquí en SO. Creo que, como creadores iniciales de PHP, solo ellos podían dar una respuesta satisfactoria al * reason * de este comportamiento. (Probablemente tenían uno, pero está escondido en la noche de nosotros, simples mortales;)) – Piskvor

1

Echo no es una función y no devuelve un valor como impresión. La impresión también es una construcción de lenguaje, no requiere paréntesis.

Manual: eco - No se devuelve ningún valor. print - Devuelve 1, siempre.

El hecho es que devolver un valor degrada el rendimiento del sistema.

Así que ahora, desde printf ES una función (que devuelve la longitud de la cadena de salida) la respuesta que creo es obvia.

+0

También puede usar: echo $ var1, $ var2, $ var3; Esto evita la concatenación. –

-1

Simplemente una conjetura salvaje, pero tal vez es porque PHP solía existir como binarios CGI. Entonces sería más fácil hacer portar guiones de shell, ya que podrías usar el eco binario en esos.