PHP'de heredoc kullanmanın avantajı nedir ve bir örnek gösterebilir misiniz?
PHP'de heredoc kullanmanın avantajı nedir ve bir örnek gösterebilir misiniz?
Yanıtlar:
Yorumlu metin sözdizimi benim için çok daha temiz ve çok satırlı dizeler ve alıntı sorunlarından kaçınmak için gerçekten yararlı. SQL sorguları oluşturmak için bunları kullandığım güne geri döndüm:
$sql = <<<SQL
select *
from $tablename
where id in [$order_ids_list]
and product_name = "widgets"
SQL;
Bana göre bu, sözdizimi hatası verme olasılığını tırnak işareti kullanmaktan daha düşüktür:
$sql = "
select *
from $tablename
where id in [$order_ids_list]
and product_name = \"widgets\"
";
Başka bir nokta, dizenizde çift tırnak işareti kullanmaktan kaçınmaktır:
$x = "The point of the \"argument" was to illustrate the use of here documents";
Yukarıdaki pProblem sözdizimi hatası (eksik kaçan alıntı) Ben sadece burada belge sözdizimi aksine tanıttı:
$x = <<<EOF
The point of the "argument" was to illustrate the use of here documents
EOF;
Bu biraz stil, ama ben dizeleri tanımlamak için tek, çift ve burada belgeler için kural olarak aşağıdakileri kullanıyorum:
'no variables here'
"Today is ${user}'s birthday"
--ansi
uyumlu modda çalışmadığında . SQL dizeleri gerekir tek tırnak kullanın.
SELECT * FROM "order" WHERE "table"='1'
Yorumlu metinler, okunabilirlik ve bakım kolaylığı nedeniyle alıntılanan dizelere mükemmel bir alternatiftir. Tırnaklardan kaçmak zorunda değilsiniz ve (iyi) IDE'ler veya metin editörleri uygun sözdizimi vurgulamasını kullanır.
Bir çok genel bir örnek: PHP içinden dışarı HTML yankılanan:
$html = <<<HTML
<div class='something'>
<ul class='mylist'>
<li>$something</li>
<li>$whatever</li>
<li>$testing123</li>
</ul>
</div>
HTML;
// Sometime later
echo $html;
Okuması ve bakımı kolaydır.
Alternatif, kaçan tırnaklar ve IDE'lerin söz konusu dilin sözdizimini vurgulamayacağı ve tırnakların okunabilirliğinin azalmasına ve bakımda daha fazla zorluğa yol açacak olan alıntı dizelerin yankılanmasıdır.
Ortak Duygunuz için güncellenmiş cevap
Elbette HTML olarak vurgulanmış bir SQL sorgusu görmek istemezsiniz. Diğer dilleri kullanmak için sözdizimindeki dili değiştirmeniz yeterlidir:
$sql = <<<SQL
SELECT * FROM table
SQL;
Bazı IDE'ler heredoc dizelerindeki kodu otomatik olarak vurgular - bu, XML veya HTML için heredoc kullanımını görsel olarak çekici kılar.
Alıntı karakterleri alıntı hakkında umurumda değil ve sadece XML yapıştırabilirsiniz çünkü ben şahsen yani XML daha uzun bölümleri için seviyorum.
Her şeyden önce, tüm nedenler özneldir. Bir sebepten ziyade bir zevk meselesi gibidir.
Şahsen, heredoc'u oldukça yararsız buluyorum ve ara sıra kullanıyorum, çoğu zaman bir değişkene biraz HTML almam gerektiğinde ve örneğin bir HTML e-posta mesajı oluşturmak için çıktı arabelleği ile uğraşmak istemediğimde.
Biçimlendirme genel girinti kurallarına uymuyor, ancak bunun çok önemli olduğunu düşünmüyorum.
//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
Kabul edilen cevaptaki örneklere gelince, sadece hile yapıyor.
Dize örnekleri, aslında, eğer onları aldatmazsa daha özlü olmak
$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';
Yorumlu makalenin tembellik olduğunu söyleyebilir miyim bilmiyorum. Bir şey yapmanın tembellik olduğunu söyleyebiliriz, çünkü her zaman bir şey yapmanın daha hantal yolları vardır.
Örneğin, belirli durumlarda, bir dosyadan getirmek ve şablon değiştirmeyi çalıştırmak zorunda olmadan katıştırılmış değişkenlerle metin çıktısı almak isteyebilirsiniz. Yorumlu metin alıntılardan kaçmak zorunda kalmanıza izin vermez, böylece gördüğünüz metin çıkardığınız metindir. Açıkça, bazı olumsuzluklar var, örneğin, yorumlu metin girintisi olamaz ve bu belirli bir durumda, özellikle de birleşik sözdizimi için bir sopa varsa, sinir bozucu olabilir.