Qual è il vantaggio dell'utilizzo di heredoc in PHP e puoi mostrare un esempio?
Qual è il vantaggio dell'utilizzo di heredoc in PHP e puoi mostrare un esempio?
Risposte:
La sintassi ereditaria per me è molto più pulita ed è davvero utile per le stringhe multilinea ed evitare problemi di quotazione. Ai tempi li usavo per costruire query SQL:
$sql = <<<SQL
select *
from $tablename
where id in [$order_ids_list]
and product_name = "widgets"
SQL;
Per me questo ha una probabilità inferiore di introdurre un errore di sintassi rispetto all'utilizzo delle virgolette:
$sql = "
select *
from $tablename
where id in [$order_ids_list]
and product_name = \"widgets\"
";
Un altro punto è evitare di sfuggire alle doppie virgolette nella stringa:
$x = "The point of the \"argument" was to illustrate the use of here documents";
Il pProblem con quanto sopra è l'errore di sintassi (la citazione con escape mancante) che ho appena introdotto in contrapposizione alla sintassi del documento qui:
$x = <<<EOF
The point of the "argument" was to illustrate the use of here documents
EOF;
È un po 'di stile, ma uso le seguenti regole per i documenti singoli, doppi e qui per la definizione delle stringhe:
'no variables here'
"Today is ${user}'s birthday"
--ansi
modalità conforme. Le stringhe SQL devono utilizzare virgolette singole.
SELECT * FROM "order" WHERE "table"='1'
Gli heredoc sono un'ottima alternativa alle stringhe tra virgolette a causa della maggiore leggibilità e manutenibilità. Non è necessario sfuggire alle virgolette e (buoni) IDE o editor di testo utilizzeranno l'evidenziazione della sintassi corretta.
Un esempio molto comune: riecheggiare HTML dall'interno di 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 da leggere e da mantenere.
L'alternativa è l'eco delle stringhe tra virgolette, che alla fine contengono virgolette sfuggite e gli IDE non metteranno in evidenza la sintassi di quella lingua, il che porta a una scarsa leggibilità e a maggiori difficoltà di manutenzione.
Risposta aggiornata per il tuo senso comune
Ovviamente non vorrai vedere una query SQL evidenziata come HTML. Per usare altre lingue, basta cambiare la lingua nella sintassi:
$sql = <<<SQL
SELECT * FROM table
SQL;
Alcuni IDE evidenziano automaticamente il codice nelle stringhe heredoc, il che rende visivamente attraente l'utilizzo di heredoc per XML o HTML.
Personalmente mi piace per parti più lunghe di XML, dal momento che non mi devo preoccupare di citare i caratteri di citazione e posso semplicemente incollare l'XML.
Prima di tutto, tutte le ragioni sono soggettive. È più una questione di gusti piuttosto che una ragione.
Personalmente, trovo heredoc abbastanza inutile e lo uso occasionalmente, il più delle volte quando ho bisogno di inserire un po 'di HTML in una variabile e non voglio preoccuparmi del buffering dell'output, per esempio per formare un messaggio di posta elettronica HTML.
La formattazione non si adatta alle regole generali di rientro, ma non credo sia un grosso 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
Per quanto riguarda gli esempi nella risposta accettata, è semplicemente barare.
Gli esempi di stringhe, in effetti, sono più concisi se non ci si tradisce
$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';
Non so se direi che l'ereditarietà è pigrizia. Si può dire che fare qualsiasi cosa sia pigrizia, poiché ci sono sempre modi più ingombranti per fare qualsiasi cosa.
Ad esempio, in alcune situazioni potresti voler generare del testo, con variabili incorporate senza dover recuperare da un file ed eseguire una sostituzione del modello. Heredoc ti consente di rinunciare a dover evitare le virgolette, quindi il testo che vedi è il testo che hai prodotto. Chiaramente ci sono alcuni aspetti negativi, ad esempio, non puoi indentare la tua eredità, e ciò può diventare frustrante in determinate situazioni, specialmente se sei un pignolo per la sintassi unificata, che io sono.