Quel est l'avantage d'utiliser heredoc en PHP, et pouvez-vous montrer un exemple?
Quel est l'avantage d'utiliser heredoc en PHP, et pouvez-vous montrer un exemple?
Réponses:
La syntaxe heredoc est beaucoup plus propre pour moi et elle est vraiment utile pour les chaînes multi-lignes et pour éviter les problèmes de citation. À l'époque où je les utilisais pour construire des requêtes SQL:
$sql = <<<SQL
select *
from $tablename
where id in [$order_ids_list]
and product_name = "widgets"
SQL;
Pour moi, cela a une probabilité plus faible d'introduire une erreur de syntaxe que d'utiliser des guillemets:
$sql = "
select *
from $tablename
where id in [$order_ids_list]
and product_name = \"widgets\"
";
Un autre point consiste à é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 pProblem avec ce qui précède est l'erreur de syntaxe (la citation échappée manquante) que je viens d'introduire par opposition à la syntaxe du document ici:
$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 les règles suivantes pour les documents simples, doubles et ici pour définir des chaînes:
'no variables here'
"Today is ${user}'s birthday"
--ansi
mode compatible. Les chaînes SQL doivent utiliser des guillemets simples.
SELECT * FROM "order" WHERE "table"='1'
Les Heredoc sont une excellente alternative aux chaînes citées en raison de la lisibilité et de la maintenabilité accrues. Vous n'avez pas à échapper les guillemets et les (bons) IDE ou éditeurs de texte utiliseront la mise en évidence de la syntaxe appropriée.
Un exemple très courant: faire écho au HTML depuis 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 fait écho aux chaînes entre guillemets, qui finissent par contenir des guillemets et des IDE échappés ne vont pas mettre en évidence la syntaxe de ce langage, ce qui conduit à une mauvaise lisibilité et à plus de difficultés de maintenance.
Réponse mise à jour pour votre bon sens
Bien sûr, vous ne voudriez pas voir une requête SQL mise en évidence en HTML. Pour utiliser d'autres langues, changez simplement la langue dans la syntaxe:
$sql = <<<SQL
SELECT * FROM table
SQL;
Certains IDE mettent automatiquement en évidence le code dans les chaînes heredoc, ce qui rend l'utilisation d'heredoc pour XML ou HTML visuellement attrayante.
Personnellement, je l'aime pour les parties plus longues de XML, car je n'ai pas à me soucier des guillemets et je peux simplement coller le XML.
Tout d'abord, toutes les raisons sont subjectives. C'est plus une question de goût que de raison.
Personnellement, je trouve heredoc assez inutile et je l'utilise de temps en temps, la plupart du temps lorsque j'ai besoin de mettre du HTML dans une variable et que je ne veux pas me soucier de la mise en mémoire tampon de sortie, pour former un e-mail 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 de tricherie.
Les exemples de chaînes sont en fait plus concis si on ne les trompe pas
$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';
Je ne sais pas si je dirais que l'hérédoc est la paresse. On peut dire que faire quoi que ce soit est de la paresse, car il existe toujours des moyens plus lourds de faire quoi que ce soit.
Par exemple, dans certaines situations, vous souhaiterez peut-être afficher du texte, avec des variables incorporées sans avoir à extraire d'un fichier et exécuter un remplacement de modèle. Heredoc vous permet de renoncer à échapper aux guillemets, donc le texte que vous voyez est le texte que vous sortez. De toute évidence, il y a des points négatifs, par exemple, vous ne pouvez pas mettre en retrait votre hérédoc, et cela peut devenir frustrant dans certaines situations, surtout si vous êtes un adepte de la syntaxe unifiée, ce que je suis.