2012-11-19 21 views
7

bazen bunu görmek

ob_start(); 
?> 
<p>Hello world</p> 
<?php 
$html = ob_get_contents(); 
ob_clean(); 

bu iki arasında ne fark söyleyebilir arabelleğe yazmanın yolları ve avantajları?

+5

Ben heredoc açıkçası çok daha temiz olduğunu söyleyebilirim. Ayrıca "arabelleğe yazmanın farklı yolları" değil. HEREDOC'ler bir dize * alıntıdır. ob_ 'diyorum, diyelim ki, çıkmadan önce herhangi bir çıkışı yakalamak için hack. – deceze

+1

Kararsız kabul, 'ob_ *' işlevlerinin çoğu kullanımı kötü tasarıma işaret ediyor. Daha sonra kontrol cihazında veya modelde HEREDOC 'çığlık' görünüm katmanı '. –

+0

@MikeB ayrıca "Heeey bana başka bir kodlayıcı için para ver!" Diye haykırıyor. –

cevap

6

heredoc (<<<) bir değişkene bir dize veri yazma sadece başka bir yoludur. Diğer yandan, çıktı arabelleği, ob_start()'dan sonra, ob_get_contents()'u aramadan önce kodda olabilecek herhangi bir uyarının veya hataların (HTML) çıktısını içeren tüm çıktıları yakalar; Sadece HTML ile bir dize biçimlendirmek gerekiyorsa

Genellikle, sadece heredoc veya düzenli dize gösterimini kullanın. Çıktı tamponu genellikle size uygulama hata ayıklama FirePHP kullanıyorsanız eğer, mesela yani (herhangi bir HTTP başlıklarını göndermeden önce çıkış yakalamak gerekirse FirePHP HTTP günlüğü verilerini gömer, çünkü çıktı tamponlama kullanmanız gerekir kullanılır başlıklar).

+1

Teşekkürler beyler. Ben noktayı görüyorum. HEREDOCs basit HTML şablonları için iyidir, ob_start(), ob_get_contents() aradaki her şeyi alır. – Jedi

8
$html = <<<HTML 
<p>Hello world</p> 
HTML; 
// equivalent: 
$html = "<p>Hello world</p>"; 

Bu şekilde farklı bir şekilde şeyler tek tırnak ve çift tırnak kullanmaya benzer bir dize yazmak ama kaçmak için bir sözdizimi olan PHP string Heredoc syntax kullanır. Bazı PHP dizelerini doğrudan eklemek için {}'u kullanabilirsiniz.


<?php 
ob_start(); 
?> 
<p>Hello world</p> 
<?php 
$html = ob_get_clean(); 

Bu tamamen farklı bir şeydir. PHP kod bloklarının içinde olmayan şeyleri yakalamak için PHP output buffering control'u kullanır. Verilen örnekte olduğu gibi, istemciye hemen çıkması beklenen PHP kod bloğu dışında <p>Hello world</p> yazılmıştır. Çıktı tamponlama etkinken, PHP'de bir tampon içinde saklanır, böylece ob_get_contents() veya ob_get_clean() kullanılarak geri alınabilir. Herhangi bir PHP değişkenini eklemeniz gerekiyorsa, <?=$blah?> veya <?php echo $blah?>'u kullanmanız gerekir. Bazı CMS, içeriği ve modülleri yönetmek için çıkış arabelleği denetim işlevlerini kullanır. Bir örnek Joomla. Bu tasarımın avantajı, modülün içeriği ayrılmış alana yerleştirmesi gerektiğinde, içeriği kullanılabilir hale getirmek için echo'u kullanabilir. Bu, belirli bir işlev çağrısı gerçekleştirmeye veya belirli bir değişkeni atamaya gerek kalmadan modüllerdeki içeriği elde etmenin yolunu basitleştirebilir, bu da sistemin yönetilmesini kolaylaştırır.

<?php 
ob_start(); 
include dirname(__FILE__)."/content.php"; 
$content = ob_get_clean(); 
output_document(array("body"=>$content)); 

Ben de üstünde bir dosya içerebilir öyle ve ben basit bir şablon sistemi oluşturabilir sonunda herhangi PHP kalmadan çıktı tamponlama işlevleri kullanılmaktadır, ancak bu tür bir konu dışı.

+0

Açıklamanız için teşekkür ederiz :-) Gerçekten bilgilendirici! – Jedi

+0

Joomla kullanıyor? Bilgi için teşekkürler - şimdi gerçekten değişken içinde html depolamak için outputbuffering kullanarak kötü bir tasarım olduğunu biliyorum :) (Joomla benim için çok dağınık/kötü tasarlanmış :)) –

İlgili konular