2012-05-04 26 views
11

i ob_start() ob_end_clean() ob_end_flush hakkında php kılavuzu inceledik(). Ve konuyla ilgili farklı bir örnek gördüm, her halükarda örneği değiştirdim ama bu noktada kafam karıştı. işte senaryo. Bu senaryonun ne oldu()?

ob_start(); 
echo "Hello x, "; 

ob_start(); 
echo "Hello y, "; 

ob_start(); 
echo "Hello z, "; 

ob_start(); 
echo "Hello World"; 
$ob_2 = ob_get_contents(); 
ob_end_clean(); 

echo "Galaxy"; 
$ob_1 = ob_get_contents(); 
ob_end_clean(); 

echo " this is OB_1 : ".$ob_1; 
echo "<br> and this is OB_2 : ".$ob_2; 

Ve çıktısı: Merhaba z Galaxy

ve bu OB_2 geçerli::

Merhaba, Merhaba y x

, bu OB_1 olan Merhaba Dünya

--------------------------------------------

Neden çıktı böyle değil?

bu OB_1 geçerli: Merhaba x, Merhaba y Merhaba z,

Galaxy ve bu OB_2 geçerli: Merhaba Dünya

Ve nokta ben ne kaçırdım mı?

cevap

17

çıkış tamponları yığını gibi çalışır. Tek bir tampon oluşturmak ve echo "Merhaba x," bunun içine, o zaman başka tampon oluşturmak ve içine "Merhaba y" echo, o zaman üçüncü bir tampon oluşturmak ve içine "Merhaba z," echo. "Merhaba Dünya", aramayı ob_end_clean() numaralı telefona kapatan dördüncü bir arabelleğe giriyor, böylece üçüncü sıraya geri döndünüz. "Galaxy" yı ekledikten sonra ob_get_contents()'u aradığınızda, o üçüncü tamponun içeriğini alırsınız.

Bu kodun sonunda tekrar ob_get_contents() numaralı telefonu arayacak olursanız, ikinci arabelleğin "Hello y" değerini alırsınız. Ve eğer ob_end_close() ve sonra ob_get_contents() tekrar ederseniz, ilk tampondan "Merhaba x" i alırsınız.

+2

: Tüm çıkış tamponlar boş olması ilklendirilmiş o standarttır. İlk açıklayan sizsiniz * neler oluyor *. Basit ama süper yararlı bir cevap için +1. –

32

Ben neler olduğunu açıklamak için kodunuzu açıklama edeceğiz. Ben yardımcı kaynaklar bulmaya çalışırken, bir saat boyunca vb floş(), ob_flush() kullanmaya çalışıyorum

ob_start(); // open output buffer 1 
echo "Hello x, "; // echo appended to output buffer 1 

ob_start(); // open output buffer 2 
echo "Hello y, "; // echo appended output buffer 2 

ob_start(); // open output buffer 3 
echo "Hello z, "; // echo appended to output buffer 3 

ob_start(); // open output buffer 4 
echo "Hello World"; // echo appended output buffer 4 
$ob_2 = ob_get_contents(); // get contents of output buffer 4 
ob_end_clean(); // close and throw away contents of output buffer 4 

echo "Galaxy"; // echo appended to output buffer 3 
$ob_1 = ob_get_contents(); // get contents of output buffer 3 
ob_end_clean(); // close and throw away contents of output buffer 3 

// at this point, $ob_2 = "Hello World" and $ob_1 = "Hello z, Galaxy" 
// output buffer 1 = "Hello x," and output buffer 2 = "Hello y," 

echo " this is OB_1 : ".$ob_1; // echo appended to output buffer 2 

// output buffer 2 now looks like "Hello y, this is OB_1 : Hello z, Galaxy" 

echo "<br> and this is OB_2 : ".$ob_2; // echo appended to output buffer 2 

// output buffer 2 now looks like: 
// "Hello y, this is OB_1 : Hello z, Galaxy<br> and this is OB_2 : Hello World" 

// output buffer 2 implicitly flushed by end of script 
// output from buffer 2 captured by (appended to) output buffer 1 
// output buffer 1 now looks like: 
// "Hello x, Hello y, this is OB_1 : Hello z, Galaxy<br> and this is OB_2 : Hello World" 
// output buffer 1 implicitly closed by end of script. This is when your output 
// actually gets printed for this particular script. 
+1

teşekkürler, çok açık :) –

+1

üzgünüm, gerçekten unutmuşum –

+1

bu harika bir açıklama hehe. : D – gumuruh