Qual é a vantagem de usar o heredoc no PHP? [fechadas]

196

Qual é a vantagem de usar o heredoc no PHP e você pode mostrar um exemplo?

danidacar
fonte
4
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 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:

  • 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.
Wes
fonte
40
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.

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;
Jake Wilson
fonte
1
Você conhece o recurso " escape from PHP " do PHP ?
Seu senso comum
5
À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?
Seu senso comum
1
Um Heredoc é uma string PHP. Claro que você não pode usar estruturas de controle em uma string. php.net/manual/en/language.types.string.php
Jake Wilson
11
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.

cweiske
fonte
6

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';
seu senso comum
fonte
3

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.

mais
fonte