Qual é a vantagem de usar o heredoc no PHP e você pode mostrar um exemplo?
Qual é a vantagem de usar o heredoc no PHP e você pode mostrar um exemplo?
Respostas:
A sintaxe do heredoc é muito mais limpa para mim e é realmente útil para seqüências de várias linhas e para evitar problemas de citação. No dia em que eu costumava usá-los para construir consultas SQL:
$sql = <<<SQL
select *
from $tablename
where id in [$order_ids_list]
and product_name = "widgets"
SQL;
Para mim, isso tem uma probabilidade menor de introduzir um erro de sintaxe do que usar aspas:
$sql = "
select *
from $tablename
where id in [$order_ids_list]
and product_name = \"widgets\"
";
Outro ponto é evitar escapar aspas duplas na sua string:
$x = "The point of the \"argument" was to illustrate the use of here documents";
O pProblem com o acima é o erro de sintaxe (a citação que está faltando) que acabei de apresentar em oposição à sintaxe do documento:
$x = <<<EOF
The point of the "argument" was to illustrate the use of here documents
EOF;
É um pouco de estilo, mas eu uso o seguinte como regras para documentos únicos, duplos e aqui para definir seqüências de caracteres:
'no variables here'
"Today is ${user}'s birthday"
--ansi
modo compatível. As seqüências SQL devem usar aspas simples.
SELECT * FROM "order" WHERE "table"='1'
Heredoc são uma ótima alternativa para seqüências de caracteres citadas devido ao aumento da legibilidade e manutenção. Você não precisa escapar de aspas e (bons) IDEs ou editores de texto usarão o realce de sintaxe adequado.
Um muito exemplo comum: ecoando HTML de dentro do 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;
É fácil de ler e fácil de manter.
A alternativa é ecoar seqüências de caracteres entre aspas, que acabam contendo aspas escapadas e IDEs não destacam a sintaxe para esse idioma, o que leva a baixa legibilidade e maior dificuldade em manutenção.
Resposta atualizada para o seu senso comum
Claro que você não gostaria de ver uma consulta SQL destacada como HTML. Para usar outros idiomas, basta alterar o idioma na sintaxe:
$sql = <<<SQL
SELECT * FROM table
SQL;
Primeiro de tudo, todas as razões são subjetivas. É mais uma questão de gosto do que uma razão.
Pessoalmente, acho o heredoc bastante inútil e o uso ocasionalmente, na maioria das vezes quando preciso inserir um pouco de HTML em uma variável e não quero me preocupar com o buffer de saída, para formar uma mensagem de email em HTML, por exemplo.
A formatação não se encaixa nas regras gerais de recuo, mas não acho que seja um grande problema.
//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
Quanto aos exemplos da resposta aceita, é apenas trapaça.
Exemplos de strings, de fato, são mais concisos se não os trairmos
$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';
Não sei se diria que heredoc é preguiça. Pode-se dizer que fazer qualquer coisa é preguiça, pois sempre há maneiras mais complicadas de fazer qualquer coisa.
Por exemplo, em determinadas situações, você pode desejar gerar texto, com variáveis incorporadas sem precisar buscar um arquivo e executar uma substituição de modelo. O Heredoc permite que você renuncie à necessidade de escapar de aspas; portanto, o texto que você vê é o texto que você produz. Claramente, existem alguns pontos negativos, por exemplo, você não pode recuar seu heredoc e isso pode ser frustrante em determinadas situações, especialmente se você é um defensor da sintaxe unificada, o que eu sou.