[PHP] Que du PHP ou mixage PHP HTML?

Petite question avant que je ne me relance sur un nouveau projet personnel PHP…

Quand on code en php, il vaut mieux :

  • ouvrir la balise php et tout coder
    ou
  • coder en html et mettre du php

Les exemples parlerons mieux.(du code tout sale)

<?php echo '<html><head><title>coucou</title></head><body>'; echo 'Bonjour tout le monde mais surtout &agrave; '.$_GET["nom"] echo '</body></html>'; ?>
OU

[code]
 
    coucou
 
 
 Bonjour tout le monde mais surtout à  <?php echo $_GET["nom"] ?>
 

[/code]

J’ai jusqu’à maintenant utilisés la première solution mais je pense que la deuxième est intéressante mais je n’ai pas de retour. Y’a t’il un réel gain en perfomance? Ou Y’a t’il d’autres raisons de passer à la deuxième solution?
Dans cet exemple, il n’y a qu’une seule entrée php. La multiplication de <?php ... ?> joue t’il sur les perfs?

Sinon,

  • à part la “structure” objet quelles sont les autres raisons pour passer en PHP5 et coder en objet?
  • Dans quel cas utiliser la connexion permanente à la base de données? J’ai jamais utilisé cette fonctionnalité, je trouve çà louche.
    A vrai dire j’ouvre et ferme la connexion à chaque requete… çà doit peser sur les perfs…

Moi je choisis : “coder en html et mettre en php”

Parce que php est un langage serveur et que si tu lui fais tout faire ton pauvre serveur morfle pour un peu rien, étant donné que le html est un langage interprêté par le navigateur du client.
Comme le client est intelligent et qu’il a un navigateur performant (qui a dit FF ? non je ne troll pas moi monsieur), ça optimise bien le tout.

Enfin, c’est mon avis et ma façon de faire.

Spare your server.

[quote name=‘Ismar’ date=’ 3 May 2005, 10:31’]Comme le client est intelligent et qu’il a un navigateur performant (qui a dit FF ? non je ne troll pas moi monsieur), ça optimise bien le tout.
[right][post=“355722”]<{POST_SNAPBACK}>[/post][/right][/quote]

Euh, je vois pas ce que la puissance du navigateur a à voir là-dedans. C’est bien le serveur qui génère du html. Pour le navigateur la méthode de génération est transparente.

Sinon pour répondre de fingah, ça dépend de ce que tu veux faire:

  • Si tu as besoin d’un tout petit peu de php parsemé dans quelques pages web, que tu n’as pas beaucoup de page, que tu as envie d’écrire rapidement tu peux mettre quelques petites touches de php dans du html.

  • Maintenant si tu veux programmer un peu plus structuré, si tu as pas mal de pages avec une structure, une hiérarchie, programme tout en php. Tu pourras par exemple utiliser les avantages de l’objet (classe mère pour la structure générale d’une page, qui simplifie la création de menus, puis dériver tout ça pour chaque page de ton site) pour te simplifier la vie (si le projet a une taille conséquente).

Personnellement quand j’ai créé un site web perso en php j’ai préféré cette deuxième méthode, même si le site était petit, parce que ça avait surtout une démarche pédagogique (et la volonté d’être fier de mon code).

C’est sûr que si tu dois programmer pour une webagency un site pour la veille où l’important c’est que la peinture ait l’air à peu près fraîche, c’est la première solution qu’il faut utiliser.

Le serveur génère le html ?
Le html est un langage interprêté : ton fichier html est lu par le navigateur quand il y a une requête qui est faite, et c’est lui qui fait que tu voit la page telle que tu la vois… C’est pour ça par exemple qu’il y avait des annonces au début de FF comme quoi il était plus rapide que IE (des trucs du genre).

[quote name=‘Ismar’ date=’ 3 May 2005, 10:48’]Le serveur génère le html ?
Le html est un langage interprêté : ton fichier html est lu par le navigateur quand il y a une requête qui est faite, et c’est lui qui fait que tu voit la page telle que tu la vois… C’est pour ça par exemple qu’il y avait des annonces au début de FF comme quoi il était plus rapide que IE (des trucs du genre).
[right][post=“355728”]<{POST_SNAPBACK}>[/post][/right][/quote]

Il ne faut pas confondre génération du html et interprétation du html.

Les deux codes proposés par fingah produisent le même code html. Et firefox, IE et tous leurs amis s’en frappent les roubignoles avec une pince à homard de comment ça a été généré, ils interprètent ce qu’ils voient.

Après évidemment la méthode de génération peut influencer la qualité du code.

Ah oui mais non, parce que dans le second cas, le serveur ne génére rien du tout. Apache ne génère pas ce qu’il n’y a pas entre les balises <?php>, et surtout il n’intervient pas du tout dessus.

D’ailleurs à la base le html, c’est un fichier texte qui peut être interprêter et c’est tout, il n’y a pas de génération de html.

C’est pas parce qu’un fichier blabla.php porte cette extension qu’il n’y aura QUE du php dedans, il peut aussi y avoir du html, mais aussi du javascript ou autre truc qui font des zigouigouis qui clignotent qui ne seront pas du tout traités par le serveur, ce sera juste renvoyé vers le client (et non pas générer).

Sans trop connaître les trefonds de php, je dirais que la première solution est sale :

Chaque ligne html est stockée sous forme de chaine en mémoire, analysée pour les caractères spéciaux (\n, ', etc.), puis renvoyée en sortie.

Alors que dans la deuxième solution, le moteur php ne s’occupe vraiment que du code.

personnelement, en php4 (donc sans objets) je fais quelque chose de ce style:

[quote]<?php

include(“miseenpage.php”);
$titre = "coucou;
$contenu = "Bonjour tout le monde mais surtout à  ".$_GET[“nom”];

echo genererPage($titre, $contenu);

?>[/quote]

en un peu plus subtil, c’est à dire que je mets tout dans une variable tableau à n dimensions, indexée sur des mots comme “titre”, “menugauche”, ce qui donne des $page[news][1][titre]…

je donne tout ça à une grosse fonction qui va se charger de mettre en page le tout selon certains critères.

ça permet d’être extrémement souple sur la génération de pages, puisque rien n’est stocké en dur: il suffit de mettre un switch dans la fonction genererPage pour donner le choix entre plusieurs styles visuels completement différents, non seulement en couleurs/images/agencement mais également au niveau des technologies utilisées coté client.

le tout sans utiliser d’objet ni de xml ni d’autres choses dans le genre (pas apr conviction, au contraire, mais principalement parce que là ou je bosse, c’est comme ça et pas autrement)

alors c’est sur que c’est lourd et pas optimisé pour deux sous, mais pour développer c’est le bonheur par rapport à une méthode plus classique: tout le html est concentré au même endroit, et dans chaque page php il n’y a que le code la concernant directement.

[quote name=‘Ismar’ date=’ 3 May 2005, 12:30’]Ah oui mais non, parce que dans le second cas, le serveur ne génére rien du tout. Apache ne génère pas ce qu’il n’y a pas entre les balises <?php>, et surtout il n’intervient pas du tout dessus.

D’ailleurs à la base le html, c’est un fichier texte qui peut être interprêter et c’est tout, il n’y a pas de génération de html.

C’est pas parce qu’un fichier blabla.php porte cette extension qu’il n’y aura QUE du php dedans, il peut aussi y avoir du html, mais aussi du javascript ou autre truc qui font des zigouigouis qui clignotent qui ne seront pas du tout traités par le serveur, ce sera juste renvoyé vers le client (et non pas générer).
[right][post=“355742”]<{POST_SNAPBACK}>[/post][/right][/quote]

Quand coccobill parle de génération de html, il parle par exemple du <?php echo $name ?> qui est transformé en ‘Jean-Paul’ ou bien ‘Benoit’… Bon, ça semble logique que dans la première solution PHP ait plus de boulot, mais dans quelle mesure les perfs changent, je n’en sais rien.

Pour faire quelque chose de propre, dans le cadre d’un site susceptible de depasser quelques pages majoritairement statiques, je ne puis que conseiller un moteur de template. J’en ai developpe un moteur simple pour mon propre site, mais il en existe plein sur le net. L’avantage de ce systeme c’est que le html sera contenu dans des fichiers 100% a part et c’est le moteur de template qui joue l’interface entre le code et le html. Ca permet de developper des gros sites sans que cela devienne illisible. On perd un peu en performances (parce qu’il doit parser le(s) fichier(s) de template au moment de la generation des pages), mais ce n’est gere catastrophique si le moteur de template est optimise, c’est de l’ordre de quelques ms. Je pense honnetement qu’il faut banir les horribles melanges html/php, non seulement c’est laid, mais pour modifier l’aspect visuel apres, c’est limite tache impossible sans revoir tout le code.

On tourne en rond… Mais finalement personne ne me convaint pour utiliser la solution deux… Pourtant mon prof me disait que c’était mieux mais la raison était plutôt nul : « Parce que c’est du script »…

Sinon je dirai que soit Ismar n’a rien compris à l’explication de coccobill, soit il se plante.
Pour rappel :

  • Le client : le navigateur web interprete le code HTML pas du tout le php! Mais pour rendre les choses difficiles, le navigateur web est capable d’interpreté d’autres script comme le css et surtout le javascript!
  • Le serveur, apache par exemple, lui est capable d’interpreter seulement si on le rattache le parser PHP (le module quoi!). Le serveur Apache génère ,donc grâce au parser, un flux de données. Ce flux de données est essentiellemment du texte contenant d’abord les en-tête http et ensuite du texte correspond à du code HTML plat (c’est pour çà qu’on ne voit pas les balises <?php ?> quand on fait « view source page »).
    Il n’y a rien qui se transmet entre client et serveur sans click ou javascript(ou autre) demandant rafraichissement…

Bon sachant que mon projet va ressembler à une grosse usine, je vais le monter en objet (çà ne me pose pas de problème…). Le vrai problème est seulement d’ordre de performance.
Je ne pensais pas non plus faire un moteur de template… Je pense qu’un code de base html bien construit permet de faire des merveilles avec le css :stuck_out_tongue:
J’ai déjà fait des tests… le code html est un peu lourd (quoique possible à optimiser) mais on peut bien s’amuser.

et un argument simple comme “la seconde solution est plus lisible et permet de repérer d’un seul coup d’oeil la partie intéressante du code”, tu en dis quoi?

[quote name=‘Rabban’ date=’ 3 May 2005, 13:34’]et un argument simple comme “la seconde solution est plus lisible et permet de repérer d’un seul coup d’oeil la partie intéressante du code”, tu en dis quoi?
[right][post=“355791”]<{POST_SNAPBACK}>[/post][/right][/quote]
Je dirai que le parser php ne me pose aucun problème et j’arrive très facilement à situer le code erroné.
De plus, je dirai que le code est moins lisible si les <?php ?> se multiple car les traitements se suivent moins intuitivement.

Parce que la question n’a pas vraiment de sens si le critère est la performance.
Déjà parce que ca dépend du code.
Ensuite parce que ca dépend de la facon dont est éxécuté php (module apache ou cgi), etc, etc.
Et au final, ca se joue en milliseconde en terme de perf.
Par contre il y a peut être (et encore pas sur) une occupation mémoire plus importante dans le cas du bloc unique. Et ca dépend toujours de la façon dont est éxécuté php.
En clair, se poser cette question de ce point de vue, c’est du pignolage de mouche :stuck_out_tongue: .

Par contre, se poser cette question du point de vue de la MAINTENANCE du site et de la rapidité de codage, c’est une excellente question.
Comme tu le dis, faire un moteur de template pour séparer la forme du fond n’a pas vraiment de sens puisque xhtml + css = le même résultat plus simplement et efficacement.
Par contre, lors de la création du code et de sa maintenance, avoir dans un fichier que du php et rien que du php est très agréable et efficace, car c’est plus lisible.
Sans compter qu’on peut adapter l’interface sans être un codeur php, dans ce cas.
Mais bon, faut un moteur de template ligth, pas un truc genre smarty.

A+

[quote name=‹ fingah › date=’ 3 May 2005, 14:26’]On tourne en rond… Mais finalement personne ne me convaint pour utiliser la solution deux… Pourtant mon prof me disait que c’était mieux mais la raison était plutôt nul : « Parce que c’est du script »…
[right][post=« 355786 »]<{POST_SNAPBACK}>[/post][/right][/quote]

Il ne faut utiliser aucun des 2 solutions parce que les 2 amenent a du code illisible, ingerable, et penible a modifier. Tu as lu ce que j’ai ecrit au moins ?

[quote name=‹ fingah › date=’ 3 May 2005, 14:26’]Je ne pensais pas non plus faire un moteur de template… Je pense qu’un code de base html bien construit permet de faire des merveilles avec le css :stuck_out_tongue:
J’ai déjà fait des tests… le code html est un peu lourd (quoique possible à optimiser) mais on peut bien s’amuser.
[right][post=« 355786 »]<{POST_SNAPBACK}>[/post][/right][/quote]

Et moi je pense que tu te plantes completement. Faire un site avec du HTML code en dur dans le php est une tres mauvaise idee.

okay… okay…
Le ton est monté j’ai pas compris… çà doit être moi :stuck_out_tongue:

Enfin rien ne m’empeche d’extraire mon code html sur un fichier à part… pour bien différencier php et html… çà ressemble alors à un début de template.
L’idée n’est pas mauvaise mais je pensais juste faire autrement.
Et c’est vrai que ma question c’est un peu du pignolage de mouche… Et que si je me pose cette question c’est que je trouve la première et la deuxième façon de coder bizarre :stuck_out_tongue:

la première façon est pire que la deuxieme, car conceptuellement elle ne correspond à rien.

la seconde, c’est faire abstraction de l’architecture client/serveur inhérente au développement web, et considérer le php comme un script qui vient donc s’insérer à postériori dans le code html, comme le ferait javascript, par exemple.

donc si il faut absolument choir, la seconde est la moins pire.

Pff unreal tjs aussi 1337 :stuck_out_tongue: On va pas coder du moteur de template pour chaque site php non plus. (vivi c’est la meilleure solution pour les gros trucs on est d’accord)

Donc 1ère solution c’est crade, et je parle pas des performances, pour un site de base on déblatère sur les 3 millièmes de de secondes perdues parce que t’as fait 3 echo au lieu d’un… Osef.

Nan le souci c’est la tronche du code, les tetrachiées de backslash pour escape les param html ça aide vraiment pas à la lecture, encore moins au debugage.
Donc du html avec des <?=$blabla;?> dedans, très bien.
Si tu veux vraiment faire ton 1337 du style ‹ plus de html dans mon php ›, ben t’assumes, et tu fais les conneries iiiixhtmeulesques. :stuck_out_tongue:

edit, genre :

[code]echo « <img src= »" . $img . « .jpg »>";

[/code]
No comment. :P"

Je plussoie le template même s’il est ultra basique!

genre

<?php readfile("entete.html"); //mon code PHP echo $_GET["nom"]; readfile("footer.html"); ?>

heu je ne connais ni php ni .net et je ne suis pas pro-microsoft à tout crin:

mais ça me parait super propre de séparer le code de la présentation comme le fait .net (et j2ee) je crois.
Ce n’est pas possible en php ?
La solution 2 s’en rapproche plus ?
Est-ce que vous codez des pages à l’interieur de colonnes de bases de données ? Je veux dire, comme je n’y connais rien, dans le cas de figure présenté, la présentation est statique et le contenu dynamique ou tout est dynamique ?

edit: je suis peut-être old school mais j’ai vraiment du mal à comprendre l’enchevêtrement de couches pour le développement n-tiers HTML-javascript-php. Je comprends mieux la vision client serveur. Mais j’ai l’impression, vu de ma fenêtre où je n’y connais rien, que le n-tiers devrait suivre la même logique. J’aurais tendance à mettre le plus de choses fonctionnelle du côté serveur et le moins possible du côté du client. Pour ce qui est de la présentation de mutualiser sur le serveur les présentations possibles.

C’est quoi en 2 mots les normes de développements n-tiers pour un vrai gros projet n-tiers du point de vue de la présentation et du fonctionnelle ?

Tout ça pour dire que je suis étonné du sujet: comment il peut y avoir une question aussi basique que php dans hmtl ou html dans php sans qu’il y ait un minimum de normes et d’état de l’art là-dessus.