Apa perbedaan antara echo, print, dan print_r di PHP?

197

Saya menggunakan echodan print_rbanyak, dan hampir tidak pernah menggunakan print.

Saya merasa echomakro, dan print_ralias var_dump.

Tapi itu bukan cara standar untuk menjelaskan perbedaan.

Mak
sumber
3
print_r tidak persis alias var_dump - itu output dalam format yang berbeda. Khususnya, output dari var_dump juga termasuk "tipe" dari setiap variabel.
thomasrutter
Detail lain untuk ditambahkan dan yang mungkin berguna, adalah var_dump memotong teks yang sangat panjang, menunjukkan ... dan menunjukkan panjang yang tersisa, misalnya: even '... (length = 4482) Jika Anda menggunakan gema ini tidak terjadi.
Yordan

Jawaban:

186

printdan echokurang lebih sama; keduanya adalah konstruksi bahasa yang menampilkan string. Perbedaannya halus: printmemiliki nilai balik 1 sehingga dapat digunakan dalam ekspresi sedangkan echomemiliki voidtipe kembali; echodapat mengambil banyak parameter, meskipun penggunaannya jarang; echosedikit lebih cepat dariprint . (Secara pribadi, saya selalu menggunakan echo, tidak pernah print.)

var_dumpmencetak dump terperinci dari suatu variabel, termasuk jenisnya dan jenis setiap sub-item (jika berupa array atau objek). print_rmencetak variabel dalam bentuk yang lebih bisa dibaca manusia: string tidak dikutip, tipe informasi dihilangkan, ukuran array tidak diberikan, dll.

var_dump biasanya lebih bermanfaat daripada print_r saat debugging, menurut pengalaman saya. Ini sangat berguna ketika Anda tidak tahu persis nilai / tipe apa yang Anda miliki dalam variabel Anda. Pertimbangkan program pengujian ini:

$values = array(0, 0.0, false, '');

var_dump($values);
print_r ($values);

Dengan print_rAnda tidak dapat membedakan antara 0dan 0.0, atau falsedan '':

array(4) {
  [0]=>
  int(0)
  [1]=>
  float(0)
  [2]=>
  bool(false)
  [3]=>
  string(0) ""
}

Array
(
    [0] => 0
    [1] => 0
    [2] => 
    [3] => 
)
John Kugelman
sumber
1
Apa itu konstruksi bahasa?
omg
1
@Shore - itu adalah sesuatu yang dibangun ke dalam bahasa yang bukan fungsi. Mereka umumnya sangat cepat, dan tidak beroperasi persis seperti fungsi normal.
alex
3
Diedit dua tahun kemudian untuk mengoreksi ketidakakuratan yang diidentifikasi dalam komentar ini. Terima kasih semua, saya pasti tidur pada 7 Juni '10. ;-)
John Kugelman
5
Cepat, ke pengacara seluler!
John Kugelman
100

gema

  • Menghasilkan satu atau lebih string yang dipisahkan oleh koma
  • Tidak ada nilai balik

    misalnya echo "String 1", "String 2"

mencetak

  • Hanya menghasilkan string tunggal
  • Kembali 1 , sehingga dapat digunakan dalam ekspresi

    misalnya print "Hello"

    atau, if ($expr && print "foo")

print_r ()

  • Menghasilkan representasi yang bisa dibaca manusia dari sembarang nilai pun
  • Menerima bukan hanya string tetapi tipe lain termasuk array dan objek, memformatnya agar dapat dibaca
  • Berguna saat debugging
  • Dapat mengembalikan outputnya sebagai nilai kembali (bukan gema) jika argumen opsional kedua diberikan

var_dump ()

  • Menghasilkan representasi yang dapat dibaca manusia dari satu atau lebih nilai yang dipisahkan oleh koma
  • Menerima bukan hanya string tetapi tipe lain termasuk array dan objek, memformatnya agar dapat dibaca
  • Menggunakan format output yang berbeda untuk print_r(), misalnya juga mencetak jenis nilai
  • Berguna saat debugging
  • Tidak ada nilai balik

var_export ()

  • Menghasilkan representasi yang dapat dibaca manusia dan PHP yang dapat dieksekusi dari nilai apa pun
  • Menerima bukan hanya string tetapi tipe lain termasuk array dan objek, memformatnya agar dapat dibaca
  • Menggunakan format output yang berbeda untuk keduanya print_r()danvar_dump() - hasil yang dihasilkan adalah kode PHP yang valid!
  • Berguna saat debugging
  • Dapat mengembalikan outputnya sebagai nilai kembali (bukan gema) jika argumen opsional kedua diberikan

Catatan:

  • Meskipun printdapat digunakan dalam ekspresi, saya sarankan orang-orang menghindari melakukannya, karena itu buruk untuk keterbacaan kode (dan karena itu tidak mungkin berguna). Aturan yang diutamakan ketika berinteraksi dengan operator lain juga bisa membingungkan. Karena itu, saya pribadi tidak pernah punya alasan untuk menggunakannya echo.
  • Sedangkan echodan printmerupakan konstruksi bahasa, print_r()dan var_dump()/ var_export()adalah fungsi biasa. Anda tidak perlu tanda kurung untuk melampirkan argumen ke echoatau print(dan jika Anda menggunakannya, mereka akan diperlakukan seperti dalam ekspresi).
  • Sementara var_export()mengembalikan kode PHP yang valid yang memungkinkan nilai untuk dibaca kembali nanti, bergantung pada kode produksi ini dapat membuatnya lebih mudah untuk memperkenalkan kerentanan keamanan karena kebutuhan untuk digunakan eval(). Akan lebih baik menggunakan format seperti JSON sebagai gantinya untuk menyimpan dan membaca kembali nilai-nilai. Kecepatannya akan sebanding.
thomasrutter
sumber
3
Hanya catatan singkat tentang kapan Anda ingin echo $a, $b;sintaks ketika Anda bisa melakukannya echo $a . $b;: jika $ a atau $ b adalah string yang sangat besar maka yang terakhir akan menggunakan memori ekstra dan waktu membuat versi string yang terpisah dari string dalam memori sebelum itu. dapat mulai mengeluarkan ke browser.
thomasrutter
Tentu saja Anda bisa menggunakannya echo $a; echo $b;juga.
thomasrutter
16

Hanya untuk menambah jawaban John ,echo harus menjadi satu-satunya yang Anda gunakan untuk mencetak konten ke halaman.

printsedikit lebih lambat. var_dump()danprint_r() seharusnya hanya digunakan untuk debug.

Juga layak disebutkan adalah bahwa print_r()dan var_dump()akan bergema secara default, tambahkan argumen kedua untuk print_r()setidaknya yang mengevaluasi true untuk mendapatkannya kembali, misalnya print_r($array, TRUE).

Perbedaan antara gema dan kembali adalah:

  • echo: Akan segera mencetak nilai ke output.
  • kembali: Akan mengembalikan output fungsi sebagai string. Berguna untuk logging, dll.
alex
sumber
Hanya karena Anda semacam mengangkat masalah, apa perbedaan antara echoing dan returning?
David mengatakan mengembalikan Monica
2
wow Saya berharap saya tahu tentang parameter kembali :( pada dasarnya Anda dapat melakukan $ foo = print_r ($ array, true); dan menggunakannya dengan cara lain (ke dalam log, tabel, dll)
FryGuy
Saya telah menggunakan print_rparam yang kembali cukup banyak ketika saya coding PHP. Namun, saya cenderung menulis print_r( $foo, 1 );. Ini lebih cepat untuk mengetik;) Dan tentang ini saya tidak terlalu peduli tentang keterbacaan karena saya menemukan nama print_rtidak terlalu deskriptif juga.
exhuma
var_dump()tidak mendukung argumen kedua yang memungkinkannya untuk mengembalikan nilai seperti print_r()tidak, karena var_dump()dapat menerima beberapa argumen untuk ditampilkan.
thomasrutter
@ thomasrutter Benar, tidak yakin mengapa saya menulis itu.
alex
6
echo

Tidak memiliki tipe pengembalian

print

Memiliki tipe pengembalian

print_r()

Output seperti yang diformat,

pengguna1899888
sumber
5

Perbedaan antara echo , print , print_r dan var_dump sangat sederhana.

gema

gema sebenarnya bukan fungsi tetapi konstruksi bahasa yang digunakan untuk mencetak hasil. Ini sedikit lebih cepat daripada cetak.

echo "Hello World";    // this will print Hello World
echo "Hello ","World"; // Multiple arguments - this will print Hello World

$var_1=55;
echo "$var_1";               // this will print 55
echo "var_1=".$var_1;        // this will print var_1=55
echo 45+$var_1;              // this will print 100

$var_2="PHP";
echo "$var_2";                   // this will print PHP

$var_3=array(99,98,97)           // Arrays are not possible with echo (loop or index  value required)
$var_4=array("P"=>"3","J"=>"4"); // Arrays are not possible with echo (loop or index  value required)

Anda juga dapat menggunakan pernyataan gema dengan atau tanpa tanda kurung

echo ("Hello World");   // this will print Hello World

mencetak

Sama seperti echo construct print juga konstruksi bahasa dan bukan fungsi nyata. Perbedaan antara gema dan cetak adalah bahwa cetak hanya menerima argumen tunggal dan cetak selalu kembali 1. Sedangkan gema tidak memiliki nilai balik. Jadi pernyataan cetak dapat digunakan dalam ekspresi.

print "Hello World";    // this will print Hello World
print "Hello ","World"; // Multiple arguments - NOT POSSIBLE with print
$var_1=55;
print "$var_1";               // this will print 55
print "var_1=".$var_1;        // this will print var_1=55
print 45+$var_1;              // this will print 100

$var_2="PHP";
print "$var_2";                   // this will print PHP

$var_3=array(99,98,97)           // Arrays are not possible with print (loop or index  value required)
$var_4=array("P"=>"3","J"=>"4"); // Arrays are not possible with print (loop or index  value required)

Sama seperti gema , hasil cetak dapat digunakan dengan atau tanpa tanda kurung.

print ("Hello World");   // this will print Hello World

print_r

Fungsi print_r () digunakan untuk mencetak informasi yang dapat dibaca manusia tentang suatu variabel. Jika argumennya adalah array, fungsi print_r () mencetak kunci dan elemennya (sama untuk objek).

print_r ("Hello World");    // this will print Hello World

$var_1=55;
print_r ("$var_1");               // this will print 55
print_r ("var_1=".$var_1);        // this will print var_1=55
print_r (45+$var_1);              // this will print 100

$var_2="PHP";
print_r ("$var_2");                // this will print PHP

$var_3=array(99,98,97)             // this will print Array ( [0] => 1 [1] => 2 [2] => 3 ) 
$var_4=array("P"=>"3","J"=>"4");   // this will print  Array ( [P] => 3 [J] => 4 ) 

var_dump

Fungsi var_dump biasanya digunakan untuk debugging dan mencetak informasi (tipe dan nilai) tentang variabel / array / objek.

var_dump($var_1);     // this will print  int(5444) 
var_dump($var_2);     // this will print  string(5) "Hello" 
var_dump($var_3);     // this will print  array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) } 
var_dump($var_4);     // this will print  array(2) { ["P"]=> string(1) "3" ["J"]=> string(1) "4" }
N Randhawa
sumber
3

Gema :

Ini adalah pernyataan bukan fungsi Tidak ada nilai balik

Tidak Diperlukan tanda kurung

Tidak Mencetak Array

Mencetak

Ini adalah fungsi nyata

Jenis kembali 1

Diperlukan tanda kurung

Tidak Mencetak Array

Print_r

Cetak dalam format yang dapat dibaca manusia

String tidak dalam Kutipan

Tidak Detail Informasi dari Variabel seperti jenis dan semua

var_dump

Semua informasi dump variabel seperti jenis elemen dan sub elemen

Bawah tanah
sumber
2
Ada banyak masalah dengan jawaban ini. printadalah tidak fungsi nyata, itu adalah bahasa seperti gema. Itu juga bisa digunakan sebagai pernyataan. echoadalah tidak pernyataan juga tidak dapat digunakan dalam satu. printtidak tidak memerlukan tanda kurung, juga tidak baik gema atau mencetak menggunakan tanda kurung seperti fungsi akan. Anda juga melewatkan salah satu perbedaan utama - gema menerima beberapa string ke gema yang dipisahkan oleh koma.
thomasrutter
2
... dan Anda mengirimkan jawaban ini ketika beberapa jawaban sudah ada dan berisi informasi yang benar .
thomasrutter
2

** Echocan menerima banyak ekspresi sementara hasil cetak tidak bisa. Fungsi Print_r () PHP digunakan untuk mengembalikan array dalam bentuk yang dapat dibaca manusia. Ini hanya ditulis sebagai

![Print_r ($your_array)][1]
shaik afroz
sumber
2

echo: echo adalah konstruksi bahasa di mana tidak diperlukan untuk menggunakan tanda kurung dengannya dan dapat mengambil sejumlah parameter dan mengembalikan batal.

   void echo (param1,param2,param3.....);

   Example: echo "test1","test2,test3";

print: ini adalah konstruksi bahasa di mana tidak perlu menggunakan tanda kurung itu hanya mengambil satu parameter dan kembali

    1 always.

           int print(param1);

           print "test1";
           print "test1","test2"; // It will give syntax error

prinf: Ini adalah fungsi yang membutuhkan minimal satu string dan gaya format dan mengembalikan panjang string output.

    int printf($string,$s);

    $s= "Shailesh";
    $i= printf("Hello %s how are you?",$s);    
    echo $i;

    Output : Hello Shailesh how are you?
             27



   echo returns void so its execution is faster than print and printf
Shailesh Thapa
sumber
2

print_r() digunakan untuk mencetak array dalam format yang dapat dibaca manusia.

vaibhav kulkarni
sumber
0

print_r () dapat mencetak nilai tetapi juga jika parameter flag kedua dilewatkan dan BENAR - itu akan mengembalikan hasil cetak sebagai string dan tidak ada yang mengirim ke output standar. Tentang var_dump. Jika XDebug debugger diinstal maka hasil output akan diformat dengan cara yang jauh lebih mudah dibaca dan dimengerti.

Bilas
sumber
-1

mereka berdua adalah konstruksi bahasa. gema mengembalikan batal dan mencetak kembali 1. gema dianggap sedikit lebih cepat daripada cetak.

uji
sumber