Php compilé ou interpreté

Fermé
rhesus - 17 juin 2003 à 15:28
 abriotde - 20 août 2013 à 22:51
Allo!
J'aimerais savoir si PHP est un langage compilé ou un langage interpreté? Merci d'avance.
A voir également:

12 réponses

mpmp93 Messages postés 6648 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 339
Modifié par mpmp93 le 18/08/2011 à 09:41
Bonjour,

PHP n'est pas compilé au sens 'compilation comme en C'

PHP est 'tokenisé', c'est à dire que l'analyseur syntaxique convertit chaque instruction texte en un lien direct vers la procédure exécutable. En fait le moteur PHP traduit le code source texte en un pseudo-code et mémorise ce code pendant un certain temps... Ce temps dépend de la capacité mémoire du serveur et la répétition des appels à ce script pseudo-compilé.

La pseudo-compilation par token a été mise en oeuvre très tôt dans différents langages de programmation, dont le BASIC sur certaines machines, Nantucket Compiler pour dBASE, etc... Le langage FORTH est un vrai compilateur totalement atypique qui reste interpréteur et compilateur et crée un code exécutable en une passe.

Les vrais compilateurs utilisent toujours le cycle ELCR (Edit -> Link -> Compile and Run). C'est le cas de C, PASCAL, etc... Le code source est traduit en une sorte de grille de liens vers une librairie, le compilateur final va agréger cette grille de liens se référant aux librairies pour générer un code exécutable indépendant du code source.

En ce sens, un programme écrit en PHP ne peut fonctionner sans son code source. Les mécanismes intimes de PHP détectent toute modification de ce code source. Le code est recompilé s'il n'y a pas d'image compilée en mémoire ou qu'une modification récente est intervenue. En fonctionnement normal, un script compilé reste en mémoire tant qu'il est utilisé pendant un certains laps de temps. Je n'ai pas de connaissance plus précise sur cette gestion de la mémoire par PHP. Mais l'incidence sur les performances d'un script font que tout script qui n'a pas été exécuté pendant un temps assez long (en général au-delà de quelques minutes...) doit être rechargé et re-compilé. Cette opération influe sur le temps d'exécution du script en question. Si on le réexécute immédiatement dans la foulée, il s'exécutera plus rapidement.

En celà, le modèle de programmation MVC offre certains avantages. Ainsi, des composants tels un framework (Zend Framework par exemple) seront persistants en mémoire sur le serveur. Tout script faisant appel à ce framework aura d'autant moins de code à re-compiler, donc s'exécutera beaucoup plus rapidement qu'un script qui embarque sa propre librairie de fonctions.

Sur des serveurs à très forte charge, le moteur PHP va gérer les scripts de nombreux 'clients'. Le délai de persistance d'une version compilée d'un script PHP peut être très court. Parfois moins de quelques secondes. Si on privilégie une programmation de type MVC (modèle -vue-contrôleur) et des librairies de fonctions mutualisées (classes applicatives et framework), on a un gain de performances:
- scripts plus simples,
- librairies persistantes en version compilées

Voilà. J'espère avoir été assez clair...

Un article intéressant sur ce sujet:
http://unearaigneeauplafond.fr/php-langage-interprete-compile/

A+
11