Apa keuntungan menggunakan heredoc di PHP, dan dapatkah Anda menunjukkan contoh?
Apa keuntungan menggunakan heredoc di PHP, dan dapatkah Anda menunjukkan contoh?
Jawaban:
Sintaks heredoc jauh lebih bersih bagi saya dan sangat berguna untuk string multi-line dan menghindari masalah mengutip. Kembali pada hari saya biasa menggunakannya untuk membangun query SQL:
$sql = <<<SQL
select *
from $tablename
where id in [$order_ids_list]
and product_name = "widgets"
SQL;
Bagi saya ini memiliki kemungkinan lebih rendah untuk memperkenalkan kesalahan sintaks daripada menggunakan kutipan:
$sql = "
select *
from $tablename
where id in [$order_ids_list]
and product_name = \"widgets\"
";
Poin lainnya adalah untuk menghindari keluarnya tanda kutip ganda dalam string Anda:
$x = "The point of the \"argument" was to illustrate the use of here documents";
PProblem dengan hal di atas adalah kesalahan sintaksis (kutipan yang hilang yang hilang) yang baru saja saya perkenalkan sebagai lawan dari sintaks dokumen di sini:
$x = <<<EOF
The point of the "argument" was to illustrate the use of here documents
EOF;
Ini sedikit gaya, tapi saya menggunakan yang berikut ini sebagai aturan untuk dokumen tunggal, ganda dan di sini untuk mendefinisikan string:
'no variables here'
"Today is ${user}'s birthday"
--ansi
mode yang sesuai. String SQL harus menggunakan tanda kutip tunggal.
SELECT * FROM "order" WHERE "table"='1'
Heredoc's adalah alternatif yang bagus untuk string yang dikutip karena peningkatan keterbacaan dan pemeliharaan. Anda tidak harus keluar dari kutipan dan (baik) IDE atau editor teks akan menggunakan penyorotan sintaksis yang tepat.
Contoh yang sangat umum: menggema HTML dari dalam 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;
Mudah dibaca dan mudah dirawat.
Alternatifnya adalah menggemakan string yang dikutip, yang akhirnya mengandung kutipan yang lolos dan IDE tidak akan menyoroti sintaksis untuk bahasa itu, yang mengarah pada keterbacaan yang buruk dan lebih banyak kesulitan dalam pemeliharaan.
Jawaban yang diperbarui untuk Akal Sehat Anda
Tentu saja Anda tidak ingin melihat kueri SQL yang disorot sebagai HTML. Untuk menggunakan bahasa lain, cukup ubah bahasa di sintaks:
$sql = <<<SQL
SELECT * FROM table
SQL;
Beberapa IDE menyoroti kode dalam string heredoc secara otomatis - yang membuat penggunaan heredoc untuk XML atau HTML menarik secara visual.
Saya pribadi suka untuk bagian yang lebih panjang yaitu XML karena saya tidak perlu peduli mengutip karakter kutipan dan hanya bisa menempelkan XML.
Pertama-tama, semua alasan bersifat subjektif. Ini lebih seperti masalah selera daripada alasan.
Secara pribadi, saya menemukan heredoc sangat tidak berguna dan menggunakannya sesekali, sebagian besar waktu ketika saya perlu memasukkan beberapa HTML ke dalam variabel dan tidak ingin repot dengan buffering keluaran, untuk membentuk pesan email HTML misalnya.
Memformat tidak cocok dengan aturan indentasi umum, tapi saya rasa ini bukan masalah besar.
//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
Adapun contoh dalam jawaban yang diterima, itu hanya curang.
Contoh-contoh string, pada kenyataannya, menjadi lebih ringkas jika seseorang tidak akan menipu mereka
$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';
Saya tidak tahu apakah saya akan mengatakan heredoc itu malas. Orang dapat mengatakan bahwa melakukan apa pun adalah kemalasan, karena selalu ada cara yang lebih rumit untuk melakukan apa pun.
Misalnya, dalam situasi tertentu Anda mungkin ingin menampilkan teks, dengan variabel tertanam tanpa harus mengambil dari file dan menjalankan penggantian templat. Heredoc memungkinkan Anda untuk melupakan keharusan melepaskan diri dari kutipan, jadi teks yang Anda lihat adalah teks yang Anda hasilkan. Jelas ada beberapa negatif, misalnya, Anda tidak dapat membuat indentasi heredoc Anda, dan itu bisa membuat frustasi dalam situasi tertentu, terutama jika Anda ngotot untuk sintaksis terpadu, yang saya.