Respuestas:
PHP es un lenguaje interpretado. El binario que te permite interpretar PHP está compilado, pero lo que escribes se interpreta.
Puede ver más en la página de Wikipedia para Idiomas interpretados
Ambos. PHP se compila en un bytecode intermedio que luego es interpretado por el motor de tiempo de ejecución.
El trabajo del compilador PHP es analizar su código PHP y convertirlo en un formulario adecuado para el motor de tiempo de ejecución. Entre sus tareas:
Dependiendo de su configuración de PHP, este paso generalmente se realiza solo una vez, la primera vez que se llama al script. La salida del compilador se almacena en caché para acelerar el acceso en usos posteriores. Sin embargo, si se modifica el script, el paso de compilación se realiza nuevamente.
El motor de tiempo de ejecución recorre el AST y el código de bytes cuando se llama al script. La tabla de símbolos se usa para almacenar los valores de las variables y proporcionar las direcciones de código de bytes para las funciones.
Este proceso de compilación a bytecode e interpretación en tiempo de ejecución es típico para los lenguajes que se ejecutan en algún tipo de máquina de tiempo de ejecución virtual, incluidos Perl, Java, Ruby, Smalltalk y otros.
PHP es un lenguaje interpretado. Sin embargo, puede compilarse en bytecode mediante herramientas de terceros.
Un código compilado puede ser ejecutado directamente por la CPU de la computadora. Es decir, el código ejecutable se especifica en el idioma nativo de la CPU
El código de los idiomas interpretados debe traducirse en tiempo de ejecución desde cualquier formato a las instrucciones de la máquina de la CPU. Esta traducción la realiza un intérprete.
No sería correcto decir que un lenguaje se interpreta o compila porque la interpretación y la compilación son propiedades de la implementación de ese lenguaje en particular y no una propiedad del lenguaje en sí. Por lo tanto, cualquier lenguaje se puede compilar o interpretar, solo depende de lo que haga la implementación particular que está utilizando.
La implementación de PHP más utilizada está impulsada por Zend Engine y se conoce simplemente como PHP. Zend Engine compila la fuente PHP en un formato que puede ejecutar, por lo que el motor Zend funciona como intérprete .
Esta es una pregunta sin sentido. PHP usa yacc (bison), al igual que GCC. yacc es un "compilador compilador". La salida de yacc es un compilador. La salida de un compilador se "compila". PHP es analizado por la salida de yacc. Entonces, por definición, se compila.
Si eso no satisface, considere lo siguiente. Tanto php (el binario) como gcc leen su código fuente y producen un árbol de sintaxis abstracta. En las versiones 4 y 5, php luego recorre el árbol para traducir el programa a bytecode (el paso de compilación). Puede ver el código de bytes traducido a códigos de operación (que son análogos al ensamblaje) usando el volquete lógico Vulcan . Finalmente, php (en particular, el motor Zend) interpreta el código de bytes. gcc, en comparación, recorre el árbol y genera el ensamblaje; También puede ejecutar ensambladores y enlazadores para finalizar el proceso. Llamar a un programa manejado por uno "interpretado" y otro programa manejado por el otro "compilado" no tiene sentido. Después de todo, los programas se ejecutan a través de un "compilador" con ambos.
En realidad, debería hacer la pregunta que desea hacer en su lugar. ("¿Pago una penalización de rendimiento ya que PHP recompila mi código fuente para cada solicitud?", Etc.)
Sé que esta pregunta es antigua, pero está vinculada por todas partes y creo que todas las respuestas aquí son incorrectas (tal vez porque son viejas).
Hay NO tal cosa como un lenguaje interpretado o un lenguaje compilado. Cualquier lenguaje de programación puede ser interpretado y / o compilado.
En primer lugar, un lenguaje es solo un conjunto de reglas, por lo que cuando hablamos de compilación nos referimos a implementaciones específicas de ese lenguaje.
HHVM , por ejemplo, es una implementación de PHP. Utiliza la compilación JIT para transformar el código en el bytecode intermedio de HipHop y luego se traduce en código de máquina. ¿Es suficiente decir que está compilado? Algunas implementaciones de Java (no todas) también usan JIT. El V8 de Google también usa JIT.
Usar las antiguas definiciones de compilado vs. interpretado no tiene sentido hoy en día.
"¿Está compilado PHP?" es una pregunta no sensorial dado que ya no hay delimitadores claros y acordados entre un lenguaje compilado y uno interpretado.
Una posible forma de delimitarlos es (no encuentro ningún significado en esta dicotomía):
los lenguajes compilados usan la compilación Ahead of Time (C, C ++);
los lenguajes interpretados utilizan la compilación Just in Time o ninguna compilación (Python, Ruby, PHP, Java).
in most cases, sí. en todos los casos, no. así que no puede dibujar una línea que sea semánticamente significativa y acordada.
Al menos no compila (o debería decir optimizar) el código tanto como uno podría desearlo.
Este código ...
for($i=0;$i<100000000;$i++);
echo $i;
... retrasa el programa por igual cada vez que se ejecuta.
Podría haber detectado que es un cálculo que solo debe hacerse la primera vez.