206 votes

Quel est l'avantage d'utiliser heredoc en PHP ?

Quel est l'avantage d'utiliser heredoc en PHP, et pouvez-vous montrer un exemple ?

4 votes

Il n'y a pas de raison forte pour que les alternatifs soient meilleurs que les hérédocs.

18 votes

J'ai édité ceci pour être plus constructif, et j'ai fait de la question un wiki communautaire car elle est assez subjective. Note, la communauté peut encore fermer cette question, j'ai choisi de la laisser ouverte parce que vous obtenez des réponses de qualité.

9 votes

Pourquoi exactement cette question n'est-elle pas considérée comme constructive ?

229voto

Wes Points 3337

La syntaxe heredoc est beaucoup plus propre pour moi et elle est vraiment utile pour les chaînes de caractères de plusieurs lignes et pour éviter les problèmes de citation. À l'époque, j'avais l'habitude de les utiliser pour construire des requêtes SQL :

$sql = <<<SQL
select *
  from $tablename
 where id in [$order_ids_list]
   and product_name = "widgets"
SQL;

Selon moi, la probabilité d'introduire une erreur de syntaxe est plus faible qu'en utilisant des guillemets :

$sql = "
select *
  from $tablename
 where id in [$order_ids_list]
   and product_name = \"widgets\"
";

Un autre point est d'éviter d'échapper les guillemets doubles dans votre chaîne :

$x = "The point of the \"argument" was to illustrate the use of here documents";

Le problème avec ce qui précède est l'erreur de syntaxe (le guillemet échappé manquant) que je viens d'introduire, par opposition à la syntaxe du document :

$x = <<<EOF
The point of the "argument" was to illustrate the use of here documents
EOF;

C'est un peu de style, mais j'utilise ce qui suit comme règles pour les documents simples, doubles et ici pour définir les chaînes de caractères :

  • Simple Les guillemets sont utilisés lorsque la chaîne de caractères est une constante telle que 'no variables here'
  • Double alors que je peux placer la chaîne sur une seule ligne et avoir besoin d'une interpolation variable ou d'un guillemet simple incorporé. "Today is ${user}'s birthday"
  • Ici pour les chaînes de caractères de plusieurs lignes qui nécessitent un formatage et une interpolation de variables.

44 votes

Nitpick sur votre exemple SQL : Vous ne devriez pas utiliser de guillemets doubles à l'intérieur. Cela ne fonctionne qu'avec MySQL, et seulement lorsque le serveur ne tourne pas en mode --ansi mode conforme. Chaînes SQL doit utiliser des guillemets simples.

17 votes

@mario C'était pour illustrer le problème de l'utilisation des guillemets en général, pas pour les spécificités du sql.

2 votes

Shrapnel useless est un mot fort car il construit la chaîne. N'avez-vous jamais été confronté à une situation où vous vouliez construire une longue chaîne de caractères contenant des guillemets doubles et où vous n'avez pas réussi à les échapper correctement ? Les documents ont leur place ici et il est bon que php les prenne en charge.

73voto

Jakobud Points 14581

Les Heredoc sont une excellente alternative aux chaînes de caractères citées, car elles sont plus faciles à lire et à maintenir. Il n'est pas nécessaire d'échapper aux guillemets et les (bons) IDE ou éditeurs de texte utilisent la coloration syntaxique appropriée.

A très Un exemple courant : l'affichage du code HTML à partir de PHP :

$html = <<<HTML
  <div class='something'>
    <ul class='mylist'>
      <li>$something</li>
      <li>$whatever</li>
      <li>$testing123</li>
    </ul>
  </div>
HTML;

// Sometime later
echo $html;

Il est facile à lire et à entretenir.

L'alternative est de faire écho aux chaînes citées, qui finissent par contenir des guillemets échappés et les IDE ne vont pas mettre en évidence la syntaxe de ce langage, ce qui entraîne une mauvaise lisibilité et plus de difficultés dans la maintenance.

Réponse actualisée pour Votre bon sens

Bien sûr, vous ne voudriez pas voir une requête SQL mise en évidence en tant que HTML. Pour utiliser d'autres langues, il suffit de changer la langue dans la syntaxe :

$sql = <<<SQL
       SELECT * FROM table
SQL;

1 votes

Connaissez-vous par hasard le " s'échapper de PHP La fonction " " ?

5 votes

S'échapper de PHP est parfois bien, mais lorsque vous faites beaucoup d'écho, votre coloration syntaxique se casse, vous devez taper plus de caractères en vous échappant simplement de PHP et PHP a plus de commandes à exécuter au lieu d'un seul écho. De plus, vous pouvez placer une chaîne Heredoc dans une variable et la renvoyer plus tard. Echapper PHP pour votre HTML signifie qu'il sera imprimé sur place. Vous ne pouvez pas le sauvegarder pour plus tard.

2 votes

1. vous pouvez utiliser la mise en mémoire tampon de sortie pour sauvegarder la sortie. 2. Vous utilisiez echo dans votre premier exemple. 3. (bon) IDE ou éditeurs de texte JAMAIS rompre la mise en évidence HTML lorsque vous utilisez l'échappement de PHP. 4. Quel IDE utilise la coloration syntaxique pour HEREDOC et quelles sont les règles de langage utilisées ? Est-il acceptable de voir une requête SQL surlignée en tant que texte HTML ?

8voto

cweiske Points 13722

Certains IDEs mettent automatiquement en évidence le code dans les chaînes heredoc - ce qui rend l'utilisation de heredoc pour le XML ou le HTML visuellement attrayante.

Personnellement, je l'apprécie pour les longues parties de XML, car je n'ai pas à me soucier des guillemets et je peux simplement coller le XML.

6voto

Tout d'abord, toutes les raisons sont subjectives. C'est plus une question de goût qu'une raison.

Personnellement, je trouve heredoc assez inutile et je l'utilise occasionnellement, la plupart du temps lorsque j'ai besoin de mettre du HTML dans une variable et que je ne veux pas m'embêter avec la mise en tampon de la sortie, pour former un message électronique en HTML par exemple.

Le formatage ne correspond pas aux règles générales d'indentation, mais je ne pense pas que ce soit un gros problème.

       //some code at it's proper level
       $this->body = <<<HERE
heredoc text sticks to the left border
but it seems OK to me.
HERE;
       $this->title = "Feedback";
       //and so on

Quant aux exemples de la réponse acceptée, il s'agit simplement d'une tricherie.
Des exemples de cordes, en fait, plus concises si l'on ne triche pas avec elles

$sql = "SELECT * FROM $tablename
        WHERE id in [$order_ids_list]
        AND product_name = 'widgets'";

$x = 'The point of the "argument" was to illustrate the use of here documents';

3voto

asnyder Points 423

Je ne sais pas si je dirais que l'hérédocité est de la paresse. On peut dire que faire n'importe quoi est de la paresse, car il y a toujours des moyens plus encombrants de faire n'importe quoi.

Par exemple, dans certaines situations, vous pouvez vouloir éditer du texte, avec des variables intégrées, sans avoir à aller chercher dans un fichier et à exécuter un remplacement de modèle. Heredoc vous permet de ne pas avoir à échapper les guillemets, de sorte que le texte que vous voyez est le texte que vous produisez. Il est clair qu'il y a des inconvénients, par exemple, vous ne pouvez pas indenter votre Heredoc, et cela peut devenir frustrant dans certaines situations, surtout si vous êtes à cheval sur la syntaxe unifiée, ce qui est mon cas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X