PHP est-il compilé ou interprété?
142
PHP est un langage interprété. Le binaire qui vous permet d'interpréter PHP est compilé, mais ce que vous écrivez est interprété.
Vous pouvez en voir plus sur la page Wikipédia des langues interprétées
Tous les deux. PHP est compilé en un bytecode intermédiaire qui est ensuite interprété par le moteur d'exécution.
Le travail du compilateur PHP est d'analyser votre code PHP et de le convertir en une forme adaptée au moteur d'exécution. Parmi ses tâches:
Selon votre configuration PHP, cette étape est généralement effectuée une seule fois, la première fois que le script est appelé. La sortie du compilateur est mise en cache pour accélérer l'accès lors des utilisations suivantes. Si le script est modifié, cependant, l'étape de compilation est recommencée.
Le moteur d'exécution parcourt l'AST et le bytecode lorsque le script est appelé. La table des symboles est utilisée pour stocker les valeurs des variables et fournir les adresses de bytecode pour les fonctions.
Ce processus de compilation en bytecode et d'interprétation au moment de l'exécution est typique pour les langages qui s'exécutent sur une sorte de machine d'exécution virtuelle, notamment Perl, Java, Ruby, Smalltalk et d'autres.
la source
En général, il est interprété, mais un certain temps peut l'utiliser comme compilé et cela augmente vraiment les performances. Outil open source pour effectuer cette opération: hhvm.com
la source
PHP est un langage interprété. Il peut cependant être compilé en bytecode par des outils tiers.
la source
Un code compilé peut être exécuté directement par le processeur de l'ordinateur. Autrement dit, le code exécutable est spécifié dans la langue native du processeur
Le code des langues interprétées doit être traduit au moment de l'exécution de n'importe quel format vers les instructions de la machine CPU. Cette traduction est effectuée par un interprète.
Il ne serait pas juste de dire qu’une langue est interprétée ou compilée parce que l’interprétation et la compilation sont toutes deux des propriétés de l’implémentation de cette langue particulière et non une propriété de la langue elle-même. Ainsi, n'importe quel langage peut être compilé ou interprété - cela dépend simplement de ce que fait l'implémentation particulière que vous utilisez.
L'implémentation PHP la plus largement utilisée est alimentée par Zend Engine et connue simplement sous le nom de PHP. Le Zend Engine compile les sources PHP dans un format qu'il peut exécuter, ainsi le moteur Zend fonctionne comme un interpréteur .
la source
C'est une question dénuée de sens. PHP utilise yacc (bison), tout comme GCC. yacc est un "compilateur compilateur". La sortie de yacc est un compilateur. La sortie d'un compilateur est "compilée". PHP est analysé par la sortie de yacc. Il est donc, par définition, compilé.
Si cela ne satisfait pas, considérez ce qui suit. Php (le binaire) et gcc lisent votre code source et produisent un arbre de syntaxe abstrait. Sous les versions 4 et 5, php parcourt ensuite l'arborescence pour traduire le programme en bytecode (étape de compilation). Vous pouvez voir le bytecode traduit en opcodes (qui sont analogues à l'assemblage) à l'aide du Vulcan Logic Dumper . Enfin, php (en particulier, le moteur Zend) interprète le bytecode. gcc, en comparaison, parcourt l'arborescence et produit l'assemblage; il peut également exécuter des assembleurs et des éditeurs de liens pour terminer le processus. Appeler un programme géré par l'un "interprété" et un autre programme géré par l'autre "compilé" n'a aucun sens. Après tout, les programmes sont tous deux exécutés via un «compilateur» avec les deux.
Vous devriez plutôt poser la question que vous souhaitez poser. ("Dois-je payer une pénalité de performance car PHP recompile mon code source pour chaque requête?", Etc.)
la source
Je sais que cette question est ancienne mais elle est liée partout et je pense que toutes les réponses ici sont incorrectes (peut-être parce qu'elles sont anciennes).
Il n'y a PAS de langage interprété ou de langage compilé. Tout langage de programmation peut être interprété et / ou compilé.
Tout d'abord, un langage n'est qu'un ensemble de règles, donc quand nous parlons de compilation, nous nous référons à des implémentations spécifiques de ce langage.
HHVM , par exemple, est une implémentation de PHP. Il utilise la compilation JIT pour transformer le code en bytecode HipHop intermédiaire, puis traduit en code machine. Suffit-il de dire qu'il est compilé? Certaines implémentations Java (pas toutes) utilisent également JIT. Le V8 de Google utilise également JIT.
Utiliser les anciennes définitions de compilé ou interprété n'a pas de sens de nos jours.
Une façon possible de les délimiter est (je ne trouve aucun sens à cette dichotomie):
les langages compilés utilisent la compilation Ahead of Time (C, C ++);
les langages interprétés utilisent la compilation Just in Time ou pas de compilation du tout (Python, Ruby, PHP, Java).
la source
in most cases
, oui. dans tous les cas, non. vous ne pouvez donc pas tracer une ligne sémantiquement significative et acceptée.Au moins, il ne compile pas (ou devrais-je dire optimiser) le code autant que l'on pourrait le vouloir.
Ce code ...
... retarde le programme de la même manière à chaque exécution.
Il aurait pu détecter que c'est un calcul qui ne doit être fait que la première fois.
la source
La réponse acceptée est manifestement fausse. PHP est compilé. Fin de l'histoire. Peut-être pas à des instructions natives mais à un bytecode interprété.
la source