Comment bien indenter du code mixte PHP/HTML? [fermé]

lors du mélange de PHP et HTML, Quel est le style d'indentation approprié à utiliser? Est-ce que je m'incline pour que le HTML sorti ait une bonne indentation, ou pour que le mélange PHP/HTML ait l'air correctement formaté (et soit donc plus facile à lire)?

par exemple, disons que j'ai une boucle foreach sortant des lignes de table. Lequel des deux est correct?

PHP / HTML mix looks correct:

<table>
  <?php foreach ($rows as $row): ?>
    <tr>
      <?php if ($row->foo()): ?>
        <?php echo $row ?>
      <?php else: ?>
        Something else
      <?php endif ?>
    </tr>
  <?php endforeach ?>
</table>

Sortie HTML semble correct:

<table>
<?php foreach ($rows as $row): ?>
  <tr>
  <?php if ($row->foo()): ?>
    <?php echo $row ?>
  <?php else: ?>
    Something else
  <?php endif ?>
  </tr>
<?php endforeach ?>
</table>

j'ai constaté que lorsque je tombe dans cette situation (assez fréquemment), Je n'ai pas de style standard à utiliser. Je sais qu'il peut ne pas être une "bonne" réponse, mais j'aimerais entendre les pensées des autres développeurs.

61
demandé sur chaos 2009-07-21 00:30:41

6 réponses

le PHP et le HTML doivent chacun être indentés de sorte qu'ils soient corrects par rapport à eux-mêmes dans la forme source, indépendamment l'un de l'autre et de la forme sortie:

<table>
<?php foreach ($rows as $row): ?>
    <tr>
    <?php if ($row->foo()): ?>
        <?php echo $row ?>
    <?php else: ?>
        Something else
    <?php endif ?>
    </tr>
<?php endforeach ?>
</table>
47
répondu chaos 2009-07-20 20:33:38

j'ai souvent réfléchi à cette question aussi, mais ensuite j'ai réalisé, qui se soucie de ce à quoi ressemble la sortie HTML? Vos utilisateurs ne devraient pas regarder votre HTML de toute façon. C'est pour vous à lire, et peut-être quelques autres développeurs. Gardez le code source aussi propre que possible et oubliez à quoi ressemble la sortie.

si vous avez besoin de déboguer la sortie, utilisez des outils de développement Chrome, Firebug, ou même des outils F12.

10
répondu mpen 2015-07-14 15:41:47

je mets généralement ouvrir tags php au début de la ligne, mais indente tout ce qui est à l'intérieur des tags pour correspondre au formatage html. Je ne fais pas cela, cependant, pour de simples déclarations echo puisque j'utilise des tags courts-ouverts. Je pense que cela rend plus simple en parcourant le fichier pour trouver toutes les déclarations.

    <table>
<?  foreach ($foo as $bar): ?>
      <tr>
<?    foreach ($bar as $baz): ?>

         <td><?=$baz?></td>

<?    endforeach ?>
      </tr>
<?  endforeach ?>
    </table>
8
répondu tj111 2009-07-21 05:25:02
  1. réponse directe à votre question: si vous avez besoin de lire la sortie HTML souvent, il pourrait être une bonne chose de sortie HTML bien indenté. Mais le cas le plus commun sera que vous devez lire votre code source php, il est donc plus important que la source soit facilement lisible.
  2. Alternative à l'une des deux options que vous avez mentionné: Voir chaos ou tj111 réponse.
  3. Mieux encore dans mon opinion: ne pas mélanger HTML et php, utilisez un moteur de modèle à la place.
4
répondu Treb 2017-05-23 11:46:25

vous pouvez toujours utiliser un peu de l'espace trop pour aider la lisibilité.

<table>

<?php foreach ($rows as $row): ?>

    <tr>

    <?php if ($row->foo()): ?>
        <?php echo $row ?>
    <?php else: ?>

        Something else

    <?php endif ?>

    </tr>

    <?php endforeach ?>

</table

le seul inconvénient avec cela est que si vous avez beaucoup de code mixte il peut faire votre document deux fois plus long, ce qui rend plus de défilement. Bien que si vous avez ce code beaucoup mixte vous pouvez vouloir considérer un moteur de templage.

2
répondu Etzeitet 2009-07-20 20:41:52

vous ne devriez pas vous soucier de l'indentation de majoration dans l'environnement de production. Vous ne devez pas non plus utiliser Tidy ou d'autres purificateurs HTML. Il existe des cas d'utilisation valides, par exemple lorsque vous autorisez L'entrée HTML (mais envisagez d'utiliser Markdown à la place), bien que ceux-ci soient rares.

la plupart du temps les embellisseurs HTML-les filtres sont abusés pour cacher les problèmes sous-jacents avec le code. Ne le fais pas. Corrigez votre marge manuellement.

Si vous avez besoin de indenter votre code uniquement dans l'environnement de développement, vous pouvez utiliser l'un des ci-dessus. Cependant, méfiez-vous que ces bibliothèques vont essayer de corriger votre markup (c'est leur but principal; indentation est un sous-produit). J'ai écrit L'expression régulière basée outil d'indentation Dindent .

Dindent convertira markup comme ceci:

<!DOCTYPE html>
<html>
<head></head>
<body>
    <script>
    console.log('te> <st');
    function () {
        test; <!-- <a> -->
    }
    </script>
    <div>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <div><table border="1" style="background-color: red;"><tr><td>A cell    test!</td>
<td colspan="2" rowspan="2"><table border="1" style="background-color: green;"><tr> <td>Cell</td><td colspan="2" rowspan="2"></td></tr><tr>
        <td><input><input><input></td></tr><tr><td>Cell</td><td>Cell</td><td>Ce
            ll</td></tr></table></td></tr><tr><td>Test <span>Ce       ll</span></td></tr><tr><td>Cell</td><td>Cell</td><td>Cell</td></tr></table></div></div>
</body>
</html>

à ceci:

<!DOCTYPE html>
<html>
    <head></head>
    <body>
        <script>
    console.log('te> <st');
    function () {
        test; <!-- <a> -->
    }
    </script>
        <div>
            <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
            <div>
                <table border="1" style="background-color: red;">
                    <tr>
                        <td>A cell test!</td>
                        <td colspan="2" rowspan="2">
                            <table border="1" style="background-color: green;">
                                <tr>
                                    <td>Cell</td>
                                    <td colspan="2" rowspan="2"></td>
                                </tr>
                                <tr>
                                    <td>
                                        <input>
                                        <input>
                                        <input>
                                    </td>
                                </tr>
                                <tr>
                                    <td>Cell</td>
                                    <td>Cell</td>
                                    <td>Ce ll</td>
                                </tr>
                            </table>
                        </td>
                    </tr>
                    <tr>
                        <td>Test <span>Ce ll</span></td>
                    </tr>
                    <tr>
                        <td>Cell</td>
                        <td>Cell</td>
                        <td>Cell</td>
                    </tr>
                </table>
            </div>
        </div>
    </body>
</html>

Dindent ne tentera pas de stérilisez ou autrement interférer avec votre code au delà de l'ajout d'indentation. Ceci est pour faciliter votre développement/débogage. Pas pour la production.

2
répondu Gajus 2014-02-19 22:23:41