Quel est l'avantage d'utiliser Heredoc en PHP, et pouvez-vous montrer un exemple?
La syntaxe doc ici est beaucoup plus propre et très utile pour les chaînes multilignes et pour éviter les problèmes de citation. À l'époque, 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, la probabilité d'introduire une erreur de syntaxe est moins grande que d'utiliser des guillemets:
$sql = "
select *
from $tablename
where id in [$order_ids_list]
and product_name = \"widgets\"
";
Un autre point est d'éviter d'échapper aux 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 (la citation échappée manquante) que je viens d'introduire par opposition à la syntaxe de document suivante:
$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 comme règles simples, doubles et ici pour définir des chaînes:
'no variables here'
"Today is ${user}'s birthday"
Heredoc's est une excellente alternative aux chaînes citées en raison de sa lisibilité et de sa facilité de maintenance accrues. Vous n'avez pas à échapper aux guillemets et les (bons) IDE ou les éditeurs de texte utiliseront la coloration syntaxique appropriée.
Un exemple TRES courant: echoing 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;
Facile à lire. Facile à maintenir.
L'alternative est l'écho des guillemets, qui finissent par contenir des guillemets et les IDE ne vont pas mettre en évidence la syntaxe de cette langue, ce qui conduit à une lisibilité médiocre et à plus de difficultés de maintenance.
Réponse mise à jour pour Votre sens commun
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 le code en évidence dans les chaînes heredoc, ce qui rend attrayante l’utilisation d’heredoc pour XML ou HTML.
Personnellement, je l’aime bien pour de longues parties de XML, car je n’ai pas à me soucier de citer des caractères de guillemets et je peux simplement coller le code 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 l’utilise occasionnellement, la plupart du temps lorsque j’ai besoin d’insérer du HTML dans une variable et que je ne veux pas me soucier de la mise en mémoire tampon de la sortie, pour former un courriel 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îne, en fait, étant 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 qu'heredoc est de la paresse, on peut dire que tout est de la paresse, car il y a toujours des moyens plus lourds de faire n'importe quoi.
Par exemple, dans certaines situations, vous pouvez générer du texte avec des variables incorporées sans avoir à extraire de fichier et à exécuter un modèle de remplacement. Heredoc vous permet de ne pas avoir à échapper des guillemets. Le texte que vous voyez est donc le texte que vous affichez. Clairement, il y a des points négatifs, par exemple, vous ne pouvez pas indenter votre heredoc, et cela peut devenir frustrant dans certaines situations, en particulier si vous vous en tenez à la syntaxe unifiée, ce que je suis.