IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Une simple question de théorie


Sujet :

Langage PHP

  1. #1
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut Une simple question de théorie.
    Bonjour,

    Une question bête, mais qui m'interpelle.

    J'ai une condition if() {;}.

    A l'intérieur de l'instruction, il y a une erreur de code, par exemple il manque un point virgule.
    Ce qui m'étonne c'est que cela déclenche une erreur PHP même si la condition if n'est pas censée être interprétée. Je pensais que le script dans ce cas ne lisait pas l'instruction.

    Aussi, j'ai constaté qu'en cliquant sur un bouton dans le couloir, la lumière s'allume.


    Pourriez-vous m'expliquer ces deux phénomènes ?

  2. #2
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    En fait, ton code passe d'abord par une étape d'analyse syntaxique. Ensuite il est exécuté ligne par ligne.
    Pour être exécuté, il faut savoir s'il peut l'être, d'où l'analyse syntaxique en premier lieu.

  3. #3
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut
    Finalement c'est presque une question pour la rubrique serveur, non ?

    J'ai un peu de mal à comprendre. Qu'est-ce qu'une étape d'analyse syntaxique ?
    c'est l'interpréteur PHP installé sur le serveur, qui fait ça ?

  4. #4
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Quand tu demandes à charger un script PHP, l'exécutable PHP commence par regarder si la grammaire de ton script est correcte. Il n'exécute rien, aucune ligne tant qu'il ne l'a pas fait. C'est lanalyse syntaxique. Il regarde si les parenthèses vont bien par deux, pareil pour les crochets, accolades, etc. Par contre, il ne vérifie pas encore que les fonctions existent etc.

    L'analyse syntaxique correspond à la fameuse "parse error".

    Une fois que c'est fait et ok, PHP parcourt une seconde fois ton script pour l'exécuter instruction par instruction (ce qui revient plus ou moins à ligne par ligne).

  5. #5
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut
    Ok, j'y vois un peu plus clair, merci Yogui.

    Pour PHP fait-il cela en deux temps ? Pourquoi ne peut-il pas vérifier que la syntaxe d'une instruction est correcte juste au moment de l'exécuter, quite à déclencher une erreur à l'instruction suivante ?

  6. #6
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Parce que tous les compilateurs fonctionnent comme cela depuis des dizaines d'années
    Bon, dans le cas des langages exécutés (sans compilation réelle), cela pourrait être un peu différent. Mais bon, c'est tellement plus rapide de commencer par faire une exécution syntaxique plutôt que de tout faire d'un coup...

  7. #7
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut
    Ok, bon je vais marquer "résolu" parce que je vois pas trop quoi poser d'autre comme question.

    Encore merci Yogui.

    Si quelqu'un a des explications supplémentaires, qu'il ne se prive guère de nous en faire part

  8. #8
    Membre expérimenté Avatar de bizet
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2005
    Messages
    717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 717
    Points : 1 338
    Points
    1 338
    Par défaut
    salut

    Pourquoi il le fait pas en meme temps?
    Je choisis un exemple empirique : 2000 lignes de codes avec des fonctions et des calculs à chaque ligne. Ton erreur de parenthese se trouve à la ligne 1990.

    Si le serveur faisait la vérification et l'execution en meme temps, alors il aurait exécuté les 1989 lignes précédentes avant de renvoyer un code d'erreur.
    Pas très optimisé concernant les ressources du serveur!!!
    Alors qu'une analyse syntaxique est "simple" et tres rapide.

    Ciao

    Bizet

  9. #9
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut
    C'est très clair, merci à toi aussi Bizet.

    Alors tant que l'on y est, parce que je n'ai pas encore installé PHP où que ce soit.
    Comment ça se passe ? On a un serveur, apache par exemple et on télécharge PHP5.
    On l'installe. Puis en recevant le code écrit sur les pages, PHP5 va l'interpréter et nous renvoyer du html, css ou autre peu importe.

    Mais en fait dans ce PHP5, qu'y a-t'il ? Comment cela se présente ?
    Je veux dire, imaginons qu'une page comporte une instruction if() else{;} .
    Bon et bien comment PHP5 fait-ilen fait pour traiter cette ligne de code ?

  10. #10
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Je ne suis pas certain de saisir la portée de ta question. Perso, je ne me suis jamais penché sur le fonctionnement interne de PHP (son propre code source) car je n'en ai pas les compétences, cela me demanderait trop de temps et cela m'aiderait trop peu à mieux développer en PHP.

    Le langage PHP lui-même n'a pas nécessairement de rapport avec le langage dans lequel PHP est développé !

  11. #11
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut
    Si, tu as tout à fait compris le sens de ma question à défaut d'y répondre plus avant.
    Déjà tu élargis mon champs de conscience en parlant de "langage dans lequel PHP est développé". C'est bien du "code source de php" dont je parlais, à défaut d'utiliser ces mêmes termes.

    Le sujet reste ouvert, si quelqu'un peut nous en dire plus il est le bienvenu, au moins en ce qui me concerne

  12. #12
    Membre éprouvé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 909
    Points : 1 014
    Points
    1 014
    Par défaut pourquoi en deux temps...
    Imagine que tu sois très doué en français, ce qui sûrement le cas...
    On te demande de corriger un livre avant qu'il sorte sur le commerce...
    Si tu fais tout à la fois, tu loupes forcément des fautes (orthographe, grammaire, conjugaison...). Alors que si tu te concentre entièrement sur la conjugaison des verbes, tu as peu de chances de les louper.

    Pour finir, ayant pas mal étudier le fonctionnement du cerveau de par mes expériences professionnelles passées, Inconscient et Conscient, il faut savoir un truc. Le cerveau Conscient peut faire environ 5 à 7 tâches simultanément. L'ordinateur... une seule à la fois. Excepté l'ordinateur quantique et ce n'est pas demain la veille qu'on en sera équipé dans nos foyers.

  13. #13
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Oui mais non... L'ordinateur ne peut certes pas effectuer plusieurs tâches à la fois, il est néanmoins en mesure de ne rater aucune faute de conjugaison même lorsqu'il ne les cherche pas spécifiquement.

    Pour cela, il faut que son code source soit parfaitement écrit. Sans entrer dans les détails (cela dépasse le champ de mes compétences), ce code source est écrit à l'aide d'un langage de programmation qui utilise des structures très similaires à celles qu'il (PHP) met en place : if-else, etc. Du coup, pour passer dans une branche ou l'autre d'un if-else, il est probable (sans trop m'avancer ici, je rappelle que je n'en sais fichtrement rien et que je m'en moque) que le code source de PHP utilise une structure if-else...

  14. #14
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut
    Justement restons dans le concret, maintenant que Yogui a recentré la question :

    Quelqu'un peut-il expliquer la manière dont PHP décode et interprète une instruction if else ? Avec un bout de code en renfort, si cela n'est point trop demandé.

    Histoire de conscientiser plus avant le fonctionnement de notre cher langage web.

  15. #15
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 657
    Points : 910
    Points
    910
    Par défaut
    Salut,

    Quelqu'un peut-il expliquer la manière dont PHP décode et interprète une instruction if else ?
    En réalité, c'est le moteur Zend qui, depuis PHP4, s'occupe de toute la partie Parseur/Compilateur/Execution de PHP. Dans un premier temps, ce moteur va analyser le code PHP puis le transformer en une série d'opcode. Une fois ces opcodes générés, une "machine virtuelle" est chargé de les éxécuter.

    En ceci, le fonctionnement est assez proche de Java ou .Net il me semble.


    Avec un bout de code en renfort, si cela n'est point trop demandé.
    Le code source complet de PHP est disponible sur le site officiel. Cela dit, la partie de moteur Zend comporte à elle seule plus de 2,5Mo de code source en C.
    Ca représente un peu plus qu'un "bout de code" comme tu dis

  16. #16
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut
    Ok, merci Taum,

    Alors quelques questions à traiter en deux mots ou plus si vous êtes motivés :

    1) moteur Zend : Qu'appelle-t'on au juste "moteur Zend" ? Zend n'est-il pas la gamme de produits conçus par le créateur du langage PHP, le suédois dont je ne me souviens plus du nom ?

    2) Parseur/Compilateur/Execution: Que sont ces trois étapes ?

    3) opcode : c'est quoi ?

    4) "machine virtuelle" : c'est quoi ?

    5) "Cela dit, la partie de moteur Zend comporte à elle seule plus de 2,5Mo de code source en C." : Donc php est écrit en C ? On peut donc dire que c'est du C modifié à tel point puisqu'adapté au web, qu'il lui a été donné un autre nom ?

    6) En fait on écrit le code en php, et le moteur traite celui-ci avec du C ?

  17. #17
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 657
    Points : 910
    Points
    910
    Par défaut
    1) 2) 3) 4)
    Google ou wikipedia t'expliqueront certainement ça beaucoup mieux que moi


    5) "Cela dit, la partie de moteur Zend comporte à elle seule plus de 2,5Mo de code source en C." : Donc php est écrit en C ? On peut donc dire que c'est du C modifié à tel point puisqu'adapté au web, qu'il lui a été donné un autre nom ?

    Le code source de PHP est effectivement écrit en C. Ce code source est ensuite compilé pour créer un executable (.exe sur windows) et c'est cet executable qui traite tes scripts.
    Cependant le langage PHP n'est pas le langage C et il existe beaucoup de différence entre les deux.


    6) En fait on écrit le code en php, et le moteur traite celui-ci avec du C ?
    Pas vraiment, comme je t'ai dit, PHP converti ton code en opcode (aussi appelé bytecode), puis execute ceux-ci à l'aide de sa machine virtuelle. A aucun moment le code n'est converti en C.


    Si tu veux plus de détail, je te conseille de chercher sur google ou wikipedia pour comprendre comment fonctionne un compilateur, comment un code source en C est converti en un programme utilisable par ta machine etc...
    C'est un sujet relativement vaste

  18. #18
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Citation Envoyé par Taum
    C'est un sujet relativement vaste
    Oui et, de plus, cela n'a pas vraiment d'intérêt pour un développeur débutant. C'est bien pour la culture générale, cela ne fait aucun doute, mais ces informations ne changent rien à la manière de coder.

  19. #19
    Membre éprouvé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 909
    Points : 1 014
    Points
    1 014
    Par défaut seul intérêt
    Le seul intérêt de coder en C pour PHP et d'écrire de nouveaux modules, à faire partager ensuite sur le web pour garder l'esprit Open Source.

    Exemple: tu as besoin d'écrire une fonction mathématique qui va être appelée très souvent dans beaucoup de calculs. Cela peut ralentir l'affichage des résultats et à la longue devenir très pénible d'attendre quand le temps est compté.

    Donc tu écris un module PHP en C qui sera intégré au moteur PHP. Il y a une API qui s'appelle ZEND_Api et il y a eu un article dans le magasin PHP Solution (4/2006 si je me souviens bien).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Une simple question
    Par Ella68 dans le forum Débuter avec Java
    Réponses: 10
    Dernier message: 30/11/2007, 14h23
  2. une simple question
    Par Ganondorf dans le forum Langage
    Réponses: 2
    Dernier message: 17/11/2007, 13h28
  3. [Forum]Une simple question à propos d'un utilisateur du forum
    Par Satch dans le forum La taverne du Club : Humour et divers
    Réponses: 76
    Dernier message: 26/07/2006, 10h56
  4. PageControl -> Une simple question
    Par Invité dans le forum C++Builder
    Réponses: 4
    Dernier message: 08/05/2004, 09h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo