Não há fortes suplentes razão são melhores do que heredocs
Shakti Singh
18
Eu editei isso para ser mais construtivo e fiz a pergunta wiki da comunidade, pois é bastante subjetiva. Observe que a comunidade ainda pode fechar isso, optei por deixá-la aberta porque você está obtendo respostas de qualidade.
Tim Post
9
Por que exatamente essa questão não é considerada construtiva?
Ambo100
Respostas:
218
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 useof 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 useof 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:
Aspas simples são usadas quando a string é uma constante como'no variables here'
Aspas duplas quando eu posso colocar a string em uma única linha e exigir interpolação variável ou aspas simples incorporadas"Today is ${user}'s birthday"
Aqui, documentos para seqüências de várias linhas que requerem formatação e interpolação variável.
Nitpick no seu exemplo SQL: você não deve usar aspas duplas dentro dele em primeiro lugar. Isso funciona apenas com o MySQL e somente quando esse servidor não é executado no --ansimodo compatível. As seqüências SQL devem usar aspas simples.
Mario
17
@mario Foi para a ilustração do problema com o uso de aspas duplas em geral, não sobre as especificidades do sql
Wes
4
Para não dizer que colocar variáveis em uma consulta diretamente é uma má, má educação :-P
Seu senso comum
5
@Wes e @mario Este é o ANSI SQL:SELECT * FROM "order" WHERE "table"='1'
programasths
11
"Não quer dizer que colocar variáveis diretamente em uma consulta seja uma má, má educação". Isto não é verdade, de forma alguma. Colocar entrada não validada em instruções SQL é "falta de educação". Às vezes, é necessário colocar variáveis nas instruções SQL.
Vogomatix 11/04
67
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.
Às vezes, escapar do PHP é bom, mas quando você está ecoando muitas coisas, sua sintaxe destaca, é necessário digitar mais caracteres, simplesmente escapando do PHP e o PHP tem mais comandos para executar em vez de um único eco. Além disso, você pode definir uma sequência Heredoc como uma variável e repeti-la posteriormente. Escapar do PHP para o seu HTML significa que ele é impresso ali e ali. Não é possível salvá-lo para mais tarde.
Jake Wilson
2
1. você pode usar o buffer de saída para salvar a saída. 2. Você estava usando eco no seu primeiro exemplo. 3. (bons) IDEs ou editores de texto NUNCA quebram o destaque HTML quando você estiver usando escape do PHP. 4. Qual IDE destaca a sintaxe do HEREDOC e quais regras de idioma são usadas? Tudo bem ver uma consulta SQL destacada como texto HTML?
Eu acho que você entendeu errado o Heredoc para aplicar apenas a strings de HTML. Heredocs são simplesmente uma maneira alternativa de definir uma string, seja HTML ou uma consulta SQL ou o que você quiser. Eles são mais fáceis de escrever e manter, a resposta de Wes acima mostra isso de forma bastante óbvia (que, se você notar, tem o destaque correto da sintaxe. Não se queixe de que o NetBeans falhou). Não sei por que você parece tão inclinado a votar uma resposta em uma pergunta da wiki da comunidade ... Acredite ou não, os desenvolvedores originais do PHP podem ter incluído o Heredoc no PHP porque pode ser realmente útil em alguns casos. .
Jake Wilson
8
Alguns IDEs destacam o código nas seqüências heredoc automaticamente - o que torna o uso do heredoc para XML ou HTML visualmente atraente.
Pessoalmente, gosto de partes mais longas do XML, pois não preciso me preocupar em citar caracteres de aspas e posso simplesmente colar o XML.
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.
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:
Para mim, isso tem uma probabilidade menor de introduzir um erro de sintaxe do que usar aspas:
Outro ponto é evitar escapar aspas duplas na sua string:
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:
É 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"
fonte
--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:
É 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:
fonte
Alguns IDEs destacam o código nas seqüências heredoc automaticamente - o que torna o uso do heredoc para XML ou HTML visualmente atraente.
Pessoalmente, gosto de partes mais longas do XML, pois não preciso me preocupar em citar caracteres de aspas e posso simplesmente colar o XML.
fonte
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.
Quanto aos exemplos da resposta aceita, é apenas trapaça.
Exemplos de strings, de fato, são mais concisos se não os trairmos
fonte
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.
fonte