Comment produisez-vous votre HTML ?
Avec un moteur de template? Avec echo ? A votre manière ?

Le , par Benjamin Delespierre, Expert Confirmé Sénior
Bonjour à tous,

Il est de notoriété publique que le principal usage de PHP soit la création dynamique de flux HTML. Mais bien qu'il existe diverses façons de produire et d'afficher ce flux de données, il n'y a pas vraiment de recommandations en la matière, chacun est libre de faire à sa convenance.

Je vous propose donc un petit sondage: quelle méthode employez-vous pour produire votre HTML ?

Traditionnellement, on peut tout simplement décrire son HTML et y insérer des balises spéciales là où on veut du dynamisme. Cette méthode était connue sous le nom de phtml et est d'ailleurs supportée nativement par Apache au même tittre qu'un script PHP classique:

En Mélangeant le PHP et le HTML
Code PHP : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php 
$user = "Jean"; 
$messages = array( 
    'Lorem ipsum dolor sit amet, consectetur adipiscing elit.', 
    'Cras sit amet mi quis mauris varius dignissim id et ipsum.', 
    'Quisque id lacus lorem.' 
); 
?> 
<!DOCTYPE HTML> 
<html lang="en-US"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Mes messages</title> 
</head> 
<body> 
    <? if (!isset($user)): ?> 
    <p class="error">Veuillez vous connecter</p> 
    <? else: ?> 
    <h2>Bienvenue <?=$user?></h2> 
    <span>Vous avez <?=count($messages)?> messages en attente</span> 
    <? foreach ($messages as $message): ?> 
    <p class="message"><?=$message?></p> 
    <? endforeach ?> 
    <? endif ?> 
</body> 
</html>

Dans cet exemple, nous nous sommes servi de la syntaxe alternative ainsi que la directive short_open_tag que je trouve beaucoup plus claire et naturelle que l'imbrication d'accolades ouvrantes/fermantes.

On peut également recourir à la structure echo:

Avec echo
Code PHP : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php 
$user = "Jean"; 
$messages = array( 
    'Lorem ipsum dolor sit amet, consectetur adipiscing elit.', 
    'Cras sit amet mi quis mauris varius dignissim id et ipsum.', 
    'Quisque id lacus lorem.' 
); 
  
echo '<!DOCTYPE HTML> 
<html lang="en-US"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Mes messages</title> 
</head> 
<body>'; 
  
if (!isset($user)) { 
    echo '<p class="error">Veuillez vous connecter</p>'; 
} 
else { 
    echo '<h2>Bienvenue ' . $user . '</h2>', 
         '<span>Vous avez ' . count($messages) . ' messages en attente</span>'; 
  
    foreach ($messages as $message) { 
        echo '<p class="message">' . $message . '</p>'; 
    } 
} 
  
echo '</body> 
</html>';

Ou encore, on peut utiliser un moteur de template tel que Smarty ou phpBB pour ne citer que les plus connus:

Avec Smarty
Code PHP : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!DOCTYPE HTML> 
<html lang="en-US"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Mes messages</title> 
</head> 
<body> 
    {if $user} 
    <p class="error">Veuillez vous connecter</p> 
    {else} 
    <h2>Bienvenue {$user}</h2> 
    <span>Vous avez {$messages|@count} messages en attente</span> 
    {foreach ($messages as $message)} 
    <p class="message">{$message}</p> 
    {/foreach} 
    {/if} 
</body> 
</html>

Et vous ?

Laquelle de ces techniques utilisez-vous et pourquoi ?
Utilisez-vous un moteur template et lequel ?
Avez-vous une tout autre technique pour produire votre flux ?


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de vaild vaild - Membre actif http://www.developpez.com
le 06/11/2012 à 15:22
"Ah. Du coup j'ai un doute. Une instruction PHP est bien convertie en opcode, non ?"

possible.
ce n'en est pas pour autant. php c'est php, opcode c'est opcode...
un binaire c'est un binaire.
C++ c'est C++, et avant compilation en autre chose, ce n'est rien de plus que du texte.

Comme le français, par exemple.
Je ne nie pas que ça finit sous forme d'instruction utilisées par un binaire, je dis juste qu'un langage n'est pas un binaire.
Avatar de CyberDenix CyberDenix - Futur Membre du Club http://www.developpez.com
le 06/11/2012 à 15:26
Citation Envoyé par vaild  Voir le message
o_O PHP c'pas du binaire !!

Citation Envoyé par laffreuxthomas  Voir le message
Ah. Du coup j'ai un doute. Une instruction PHP est bien convertie en opcode, non ?

Je viens de chercher un peu et il semblerait que le jeu d'instructions opcode de PHP soit indépendant de la plateforme, à l'instar du bytecode Java. Dans ce cas la différence entre un langage semi-interprété façon Java et interprété façon PHP c'est juste le moment de la compilation : à la volée ou non. Il est très possible que je me trompe.

J'ajoute que le bytecode Java est bel et bien traduit en langage machine juste avant son exécution. Il existe donc bien au final du code machine correspondant à une instruction Java. Donc l'instruction Java a été convertie en code machine, qu'on appelle ça (semi-)compilation ou non. Pour PHP j'en suis moins sûr mais il me semblait qu'il en allait de même.


Tu as raison.



Source : http://julien-pauli.developpez.com/t...e=page_2#LII-C

Il est évident que pour être exécuté, à moment donné le code PHP est converti en binaire. Que ce soit par une phase de transition (OpCode, ByteCode) ou directement, tout langage est converti en binaire.
Avatar de vaild vaild - Membre actif http://www.developpez.com
le 06/11/2012 à 15:34
Mf. relis mon post précédent. PHP c'pas du binaire. c'est peut-être destiné à en devenir, mais c'est du texte. point.
Avatar de laffreuxthomas laffreuxthomas - Membre éprouvé http://www.developpez.com
le 06/11/2012 à 15:35
OK il y a une VM, c'est bien ce qu'il me semblait.

Donc oui vaild se trompe : le code qui tourne, c'est du binaire, en PHP comme en C++. Et il y a bien un processus de compilation, même s'il se fait en plusieurs fois, ça ne change rien, c'est toujours une compilation.

Et c'est différent d'un programme qui analyserait par exemple des commandes déposées dans une table d'une base de données afin de les exécuter en tâche de fond : dans ce cas il n'y a pas de compilation, les commandes ne sont pas traduites en langage machine, le code machine est celui du programme seul. (Je soupçonne les langages de Shell de procéder ainsi.)
Avatar de vaild vaild - Membre actif http://www.developpez.com
le 06/11/2012 à 15:37
idem. relis-moi.

le code qui tourne c'est du binaire. mais php n'en est pas pour autant.
Avatar de laffreuxthomas laffreuxthomas - Membre éprouvé http://www.developpez.com
le 06/11/2012 à 17:04
Oui tu es bien gentil de m'expliquer que le code source n'est pas le langage machine.

Donc oui un code source PHP n'est pas du code machine, sauf que c'est le cas pour n'importe quel langage de programmation et les histoires de (je te cite) "compilés, semi-compilés & interprétés" ne changent rien à l'affaire. Du moins dans le cas discuté ici.
Avatar de RPGamer RPGamer - Nouveau Membre du Club http://www.developpez.com
le 19/11/2012 à 10:07
Pour ma part, avec une méthode de mon cru. Évidemment le HTML et le PHP sont séparés, c'est un minimum.
Avatar de Hotei Hotei - Membre à l'essai http://www.developpez.com
le 26/11/2012 à 14:57
Salut à tous.

En fait tout va dépendre de son utilisation.
Pour ce qui est des projets / applications web, j'utilise symfony 2 donc Twig systématiquement.
Pour ce qui est des codes "plus simple" qui ne seront utilisés que pour des mini sites ou applications, le mélange des 2 est quand même moins chiant et lourd que de passer par un MVC complet avec template
Avatar de greg91 greg91 - Membre régulier http://www.developpez.com
le 02/01/2013 à 14:47
Des balises PHP dans du code html.

Plus clair pour l'intégrateur.
Avatar de John Blobsmith John Blobsmith - Membre confirmé http://www.developpez.com
le 03/01/2013 à 13:49
Moteur de template!!!

Surtout pour :
- bien séparer la vue du contrôler.
- plus de lisibilité, même des balises php dans tu html ça reste des balises...
- puis avec du php dans du html y'a toujours un moment ou ça dérape avec un petit malin qui va mettre du code autre que pour la présentation.
Avatar de neowinder neowinder - Futur Membre du Club http://www.developpez.com
le 24/03/2013 à 21:03
J'utilise le moteur de Template de Laravel, qui ressemble à twig (celui de symfony).

C'est plus lisible d'avoir le PHP et le html (par moteur de template) de l'autre, plus de flexibilité surtout si on fait appel à un webdesigner ou autre corps de métiers.

Citation Envoyé par Hotei  Voir le message
...
Pour ce qui est des codes "plus simple" qui ne seront utilisés que pour des mini sites ou applications, le mélange des 2 est quand même moins chiant et lourd que de passer par un MVC complet avec template

@Hotei : Pas forcément, pour mon cas, Laravel est léger comme Codeigniter mais possède des caractéristique des gros framework comme Symfony, sur qui laravel 4 pompe pas mal de bundle Et c'est moins lourd à mettre en place, qu'un site symfony
Responsable bénévole de la rubrique Accueil : le Service Publications -