Risposte:
PHP è un linguaggio interpretato. Il binario che ti consente di interpretare PHP viene compilato, ma ciò che scrivi viene interpretato.
Puoi vedere di più sulla pagina di Wikipedia per le lingue interpretate
Tutti e due. PHP viene compilato in un bytecode intermedio che viene quindi interpretato dal motore di runtime.
Il compito del compilatore PHP è di analizzare il codice PHP e convertirlo in un modulo adatto al motore di runtime. Tra i suoi compiti:
A seconda della configurazione di PHP, questo passaggio viene in genere eseguito una sola volta, la prima volta che viene chiamato lo script. L'output del compilatore viene memorizzato nella cache per accelerare l'accesso agli usi successivi. Se lo script viene modificato, tuttavia, la fase di compilazione viene ripetuta.
Il motore di runtime accompagna AST e bytecode quando viene chiamato lo script. La tabella dei simboli viene utilizzata per memorizzare i valori delle variabili e fornire gli indirizzi bytecode per le funzioni.
Questo processo di compilazione in bytecode e di interpretazione in fase di runtime è tipico per i linguaggi eseguiti su un tipo di macchina virtuale di runtime, tra cui Perl, Java, Ruby, Smalltalk e altri.
PHP è un linguaggio interpretato. Tuttavia, può essere compilato in bytecode da strumenti di terze parti.
Un codice compilato può essere eseguito direttamente dalla CPU del computer. Cioè, il codice eseguibile è specificato nella lingua nativa della CPU
Il codice delle lingue interpretate deve essere tradotto in fase di esecuzione da qualsiasi formato alle istruzioni della macchina CPU. Questa traduzione è fatta da un interprete.
Non sarebbe corretto dire che una lingua è interpretata o compilata perché l'interpretazione e la compilazione sono entrambe proprietà dell'implementazione di quella particolare lingua e non una proprietà della lingua stessa. Quindi, qualsiasi linguaggio può essere compilato o interpretato - dipende solo da ciò che fa l'implementazione particolare che stai usando.
L'implementazione PHP più utilizzata è alimentata da Zend Engine e nota semplicemente come PHP. Zend Engine compila il sorgente PHP in un formato che può essere eseguito, quindi il motore Zend funziona come un interprete .
Questa è una domanda insignificante. PHP usa yacc (bisonte), proprio come GCC. yacc è un "compilatore del compilatore". L'output di yacc è un compilatore. L'output di un compilatore è "compilato". PHP viene analizzato dall'output di yacc. Quindi, per definizione, è compilato.
Se ciò non soddisfa, considerare quanto segue. Sia php (il binario) che gcc leggono il codice sorgente e producono un albero di sintassi astratto. Nelle versioni 4 e 5, php quindi cammina l'albero per tradurre il programma in bytecode (il passo della compilazione). Puoi vedere il bytecode tradotto in codici operativi (che sono analoghi all'assembly) usando il Vulcan Logic Dumper . Infine, php (in particolare il motore Zend) interpreta il bytecode. gcc, in confronto, cammina l'albero e genera l'assemblaggio; può anche eseguire assemblatori e linker per completare il processo. Chiamare un programma gestito da uno "interpretato" e un altro programma gestito dall'altro "compilato" non ha senso. Dopotutto, entrambi i programmi vengono eseguiti attraverso un "compilatore" con entrambi.
Dovresti invece porre la domanda che vuoi porre. ("Devo pagare una penalità per le prestazioni quando PHP ricompila il mio codice sorgente per ogni richiesta?", Ecc.)
So che questa domanda è vecchia ma è collegata dappertutto e penso che tutte le risposte qui siano errate (forse perché sono vecchie).
NON esiste una lingua interpretata o una lingua compilata. Qualsiasi linguaggio di programmazione può essere interpretato e / o compilato.
Innanzitutto una lingua è solo un insieme di regole, quindi quando parliamo di compilazione ci riferiamo a implementazioni specifiche di quella lingua.
HHVM , ad esempio, è un'implementazione di PHP. Utilizza la compilazione JIT per trasformare il codice in bytecode HipHop intermedio e quindi tradotto in codice macchina. Basta dire che è compilato? Alcune implementazioni Java (non tutte) usano anche JIT. V8 di Google utilizza anche JIT.
L'uso delle vecchie definizioni di compilato vs. interpretato non ha senso al giorno d'oggi.
"Il PHP è compilato?" è una domanda non sensata, dato che non esistono più delimitatori chiari e concordati tra ciò che è un linguaggio compilato e uno interpretato.
Un modo possibile per delimitarli è (non trovo alcun significato in questa dicotomia):
i linguaggi compilati utilizzano la compilazione Ahead of Time (C, C ++);
i linguaggi interpretati usano la compilazione Just in Time o nessuna compilation (Python, Ruby, PHP, Java).
in most cases, si. in tutti i casi, no. quindi non puoi tracciare una linea che sia semanticamente significativa e concordata.
Almeno non compila (o dovrei dire ottimizzare) il codice quanto si potrebbe desiderare.
Questo codice ...
for($i=0;$i<100000000;$i++);
echo $i;
... ritarda il programma allo stesso modo ogni volta che viene eseguito.
Potrebbe aver rilevato che si tratta di un calcolo che deve essere eseguito solo la prima volta.