Hey

,
Il faut remettre quelques pendules à l'heure je pense.
Par abus de langage (sans mauvais jeu de mot), quand on parle de compilation c'est toujours « en langage machine », mais on peut compiler pour autre chose. La compilation c'est juste le fait d'analyser (lexicalement et syntaxiquement) un code et de le transformer dans un autre code.
Partant de ce postulat, C/C++ est compilé, Java aussi, mais PHP également ! À votre avis, comment PHP s'exécute au final ? Il est transformé dans un
byte code que le ZE (
Zend Engine) comprend et arrive à exécuter. Pour Java, c'est la même chose. Il est compilé en
byte code qui est interprété par la JVM (
Java Virtual Machine). C'est ce qui permet entre autre l'interopérabilité des applications car il suffit de créer un interpréteur (ZE ou JVM) par plate-forme et le langage sera opérationnel sur cette plate-forme sans re-modifier le cœur/noyau du langage.
Petite note au passage, le
byte code de Java n'est rien d'autres que de l'assembleur amélioré,
i.e. avec quelques fonctionnalités supplémentaires, mais dans l'ensemble ça reste de l'assembleur, tout bêtement. Ça doit être pareil (je n'ai pas étudié encore cette partie), mais PHP ne réinvente par la roue dans ce genre de domaine, donc …
Pourquoi dit-on que PHP est alors interprété au lieu de compilé ? Je ne sais pas ce que les Wikipédestres nous diraient, mais je pense que c'est une notion de volée. PHP est compilé puis interprétée à la volée, c'est à dire que le résultat de la compilation n'est jamais stocké à long terme. Aussitôt compilé, aussitôt absorbé/interprété et supprimé. Alors que pour Java, on a le résultat de la compilation qui est stocké une fois pour toute. C'est juste ça. Pareil pour C/C++ etc. hein, je donne des exemples, je ne fais pas de favoritisme …
Maintenant, les performances d'un langage compilé ou interprété (avec les connaissances que l'on vient d'apprendre), je ne saurais tenir un comparatif pertinent … Peut-être que quelqu'un a étudié ça de manière plus approfondie que moi

…
Trivialement, je dirais qu'il y a plus d'optimisations effectuées lors d'une compilation que d'un interprétation car de la vitesse de l'interprétation dépend l'attente du résultat. Si l'interpréteur met 10 minutes pour optimiser quelques lignes de codes, on aura perdu du temps. L'interpréteur doit donc transformer/compiler le code très rapidement. Le compilateur peut prendre son temps, on s'en fout pas mal, il nous faut un résultat optimisé (typiquement pour une plate-forme précise).
Disons qu'il y a des avantages et des inconvénients. On ne peut pas trancher à vif comme ça, ça mérite plus d'attentions et d'études.