¿Cuál es la ventaja de usar heredoc en PHP, y puede mostrar un ejemplo?
¿Cuál es la ventaja de usar heredoc en PHP, y puede mostrar un ejemplo?
La sintaxis heredoc es mucho más limpia para mí y es realmente útil para cadenas de varias líneas y evitar problemas de citas. En el pasado, solía usarlos para construir consultas SQL:
$sql = <<<SQL
select *
from $tablename
where id in [$order_ids_list]
and product_name = "widgets"
SQL;
Para mí, esto tiene una probabilidad menor de introducir un error de sintaxis que el uso de comillas:
$sql = "
select *
from $tablename
where id in [$order_ids_list]
and product_name = \"widgets\"
";
Otro punto es evitar escapar de las comillas dobles en su cadena:
$x = "The point of the \"argument" was to illustrate the use of here documents";
El pProblema con lo anterior es el error de sintaxis (la comilla escapada que falta) que acabo de presentar en lugar de la sintaxis del documento aquí:
$x = <<<EOF
The point of the "argument" was to illustrate the use of here documents
EOF;
Es un poco de estilo, pero uso lo siguiente como reglas para documentos simples, dobles y aquí para definir cadenas:
'no variables here'
"Today is ${user}'s birthday"
--ansi
modo compatible. Las cadenas SQL deben usar comillas simples.
SELECT * FROM "order" WHERE "table"='1'
Los Heredoc son una gran alternativa a las cadenas citadas debido a la mayor legibilidad y facilidad de mantenimiento. No tiene que escapar de las comillas y los IDE (buenos) o editores de texto utilizarán el resaltado de sintaxis adecuado.
Un ejemplo muy común: hacer eco de HTML desde 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;
Es fácil de leer y fácil de mantener.
La alternativa es hacer eco de las cadenas entre comillas, que terminan conteniendo comillas escapadas e IDE no van a resaltar la sintaxis de ese idioma, lo que conduce a una mala legibilidad y a una mayor dificultad en el mantenimiento.
Respuesta actualizada para su sentido común
Por supuesto, no querrá ver una consulta SQL resaltada como HTML. Para usar otros idiomas, simplemente cambie el idioma en la sintaxis:
$sql = <<<SQL
SELECT * FROM table
SQL;
Algunos IDE resaltan el código en las cadenas heredoc automáticamente, lo que hace que el uso de heredoc para XML o HTML sea visualmente atractivo.
Personalmente me gusta para partes más largas, es decir, XML, ya que no tengo que preocuparme por citar caracteres de comillas y simplemente puedo pegar el XML.
En primer lugar, todas las razones son subjetivas. Es más una cuestión de gustos que una razón.
Personalmente, encuentro heredoc bastante inútil y lo uso ocasionalmente, la mayoría de las veces cuando necesito incorporar algo de HTML a una variable y no quiero molestarme con el búfer de salida, para formar un mensaje de correo electrónico HTML, por ejemplo.
El formateo no se ajusta a las reglas generales de sangría, pero no creo que sea un gran 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
En cuanto a los ejemplos en la respuesta aceptada, es simplemente hacer trampa.
Los ejemplos de cadenas, de hecho, son más concisos si uno no los engaña
$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';
No sé si diría que heredoc es pereza. Se puede decir que hacer cualquier cosa es pereza, ya que siempre hay formas más engorrosas de hacer cualquier cosa.
Por ejemplo, en ciertas situaciones es posible que desee generar texto, con variables incrustadas sin tener que buscar un archivo y ejecutar un reemplazo de plantilla. Heredoc le permite renunciar a las comillas, por lo que el texto que ve es el texto que genera. Claramente, hay algunos aspectos negativos, por ejemplo, no puedes sangrar tu heredoc, y eso puede ser frustrante en ciertas situaciones, especialmente si eres un fanático de la sintaxis unificada, que yo soy.