PHP'de echo, print ve print_r arasındaki fark nedir?


197

Çok kullanıyorum echove print_rneredeyse hiç kullanmıyorum print.

echoBir makro ve print_rbir takma ad olduğunu hissediyorum var_dump.

Ancak bu, farklılıkları açıklamanın standart yolu değildir.


3
print_r tam olarak var_dump'ın bir takma adı değildir - farklı bir biçimde çıkar. Özellikle, var_dump çıktısı her değişkenin "tipini" de içerir.
thomasrutter


Eklenecek başka bir ayrıntı ve bu da yararlı olabilir, var_dump çok uzun metinleri kısaltır, gösterilir ... ve kalan uzunluğu gösterir, örneğin: even '... (length = 4482) echo kullanırsanız bu olmaz.
Yordan

Yanıtlar:


186

printve echoaz çok aynı; her ikisi de dizeleri görüntüleyen dil yapılarıdır. Farklar inceliklidir: print1 dönüş değerine sahiptir, bu nedenle ifadelerde kullanılabilirken echobir voiddönüş türü vardır; echobu tür kullanım nadir olmasına rağmen birden fazla parametre alabilir; echobiraz daha hızlıprint . (Şahsen ben echoasla kullanmam , asla print.)

var_dumpbir değişkenin türü ve alt öğelerin türü de dahil olmak üzere (bir dizi veya nesne ise) bir değişkenin ayrıntılı dökümünü yazdırır. print_rbir değişkeni daha okunabilir biçimde yazdırır: dizeler tırnak içine alınmaz, tür bilgileri atlanır, dizi boyutları verilmez vb.

var_dumpgenellikle print_rhata ayıklama, deneyimlerime göre daha yararlıdır . Değişkenlerinizde tam olarak hangi değerlere / türlere sahip olduğunuzu bilmediğinizde özellikle kullanışlıdır. Bu test programını düşünün:

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

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

İle print_rarasındaki farkı söyleyemem 0ve 0.0ya falseve '':

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

Array
(
    [0] => 0
    [1] => 0
    [2] => 
    [3] => 
)

1
Dil yapısı nedir?
omg

1
@Shore - bu, işlev olmayan bir dilde yerleşik bir şeydir. Genellikle çok hızlıdırlar ve normal işlevler gibi çalışmazlar.
alex

3
Bu yorumlarda belirtilen yanlışlıkları düzeltmek için iki yıl sonra düzenlendi. Teşekkürler, 7 Haziran '10'da uyumuş olmalıydım. ;-)
John Kugelman


5
Hızlı, avukat mobil!
John Kugelman

100

Eko

  • Virgülle ayrılmış bir veya daha fazla dize çıktılar
  • Dönüş değeri yok

    Örneğin echo "String 1", "String 2"

Yazdır

  • Yalnızca tek bir dize çıktılar
  • 1Bir ifadede kullanılabilmesi için döndürür

    Örneğin print "Hello"

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

print_r ()

  • Herhangi bir değerin insan tarafından okunabilir temsilini çıktılar
  • Yalnızca dizeleri değil, diziler ve nesneler de dahil olmak üzere diğer türleri kabul edilebilir şekilde biçimlendirir
  • Hata ayıklamada kullanışlıdır
  • İkinci isteğe bağlı bağımsız değişken verilirse çıktısını bir dönüş değeri olarak (yankılamak yerine) döndürebilir

var_dump ()

  • Virgülle ayrılmış bir veya daha fazla değerin insan tarafından okunabilir bir temsilini çıktılar
  • Yalnızca dizeleri değil, diziler ve nesneler de dahil olmak üzere diğer türleri kabul edilebilir şekilde biçimlendirir
  • Farklı bir çıktı biçimi kullanır print_r(), örneğin değer türlerini de yazdırır
  • Hata ayıklamada kullanışlıdır
  • Dönüş değeri yok

var_export ()

  • Herhangi bir değerin insan tarafından okunabilir ve PHP tarafından yürütülebilir bir gösterimini çıkarır
  • Yalnızca dizeleri değil, diziler ve nesneler de dahil olmak üzere diğer türleri kabul edilebilir şekilde biçimlendirir
  • Hem için farklı bir çıktı biçimi kullanır print_r()ve var_dump()sonuçta elde edilen çıktı geçerli PHP kodudur!
  • Hata ayıklamada kullanışlıdır
  • İkinci isteğe bağlı bağımsız değişken verilirse çıktısını bir dönüş değeri olarak (yankılamak yerine) döndürebilir

Notlar:

  • Rağmen printbir ifadenin kullanılabilir, insanların bu kod okunabilirliği için kötüdür, çünkü bunu yaparken (ve şimdiye kadar yararlı olmayacaktır çünkü) kaçının önerilir. Diğer operatörlerle etkileşime girdiğinde öncelik kuralları da kafa karıştırıcı olabilir. Bu nedenle, şahsen bunu kullanmak için hiçbir nedenim yok echo.
  • Halbuki echove printdil kurguları print_r()ve var_dump()/ var_export()ve düzenli işlevlerdir. Sen argümanlar içine için parantez gerekmez echoveya print(eğer bunları kullanmak yaparsanız bir ifadedeki onlar olduğu gibi ve onlar tedavi olacak).
  • İken var_export()döner geçerli PHP kodu sağlayan değerler daha sonra tekrar okunacak, üretim kodu için bu güvenerek daha kolay dolayı kullanım ihtiyacına güvenlik açıklarını tanıtmak yapabilir eval(). Değerleri saklamak ve yeniden okumak için JSON gibi bir biçim kullanmak daha iyi olur. Hız karşılaştırılabilir olacaktır.

3
Sadece echo $a, $b;yapabileceğiniz zaman sözdiziminin ne zaman olmasını istediğinize dair kısa bir not echo $a . $b;: $ a veya $ b gerçekten büyük dizeler ise, ikincisi ekstra bellek kullanır ve zaman önce dizideki dizelerin ayrı birleştirilmiş bir versiyonunu oluşturur tarayıcıdan çıktı almaya başlayabilir.
thomasrutter

Tabii ki de kullanabilirsiniz echo $a; echo $b;.
thomasrutter

16

Sadece John'un cevabına eklemek için , echoiçeriği sayfaya yazdırmak için kullandığınız tek kişi olmalıdır.

printbiraz daha yavaştır. var_dump()ve print_r()yalnızca hata ayıklamak için kullanılmalıdır.

Ayrıca kayda değer bir şeydir print_r()ve var_dump()varsayılan olarak yankılanacaktır, print_r()bunun yerine en azından true olarak değerlendirilen ikinci argümanı ekleyin print_r($array, TRUE);

Yankı ve geri dönüş arasındaki fark:

  • echo: Değeri hemen çıktıya yazdırır.
  • return: İşlevin çıktısını dize olarak döndürür. Günlüğe kaydetme vb. İçin kullanışlıdır.

Sorunu biraz gündeme getirdiğiniz için echoing ve returning arasındaki fark nedir?
David, Monica'yı

2
wow Keşke dönen parametre hakkında bilgi sahibi olsaydım :( temelde $ foo = print_r ($ dizi, true) yapabilir ve başka şekillerde kullanabilirsiniz (bir günlük, tablo, vb.)
FryGuy

Ben print_rPHP kodlama yaparken dönen param çok kullandım . Ancak, yazma eğilimindeydim print_r( $foo, 1 );. Yazmak daha hızlı;) Ve bu konuda, adı print_rda çok açıklayıcı değilken okunabilirlik hakkında çok fazla umursamıyorum .
exhuma

var_dump()çıktı gibi birden çok argümanı kabul edebileceğinden , ikinci argümanı olduğu gibi bir değer döndürmesine izin print_r()vermez var_dump().
thomasrutter

@thomasrutter Doğru, neden yazdığımı bilmiyorum.
alex

6
echo

Dönüş türü olmaması

print

Dönüş türü var

print_r()

Biçimlendirilmiş çıktılar,


5

Echo , print , print_r ve var_dump arasındaki fark çok basittir.

Eko

echo aslında bir işlev değil, çıktıyı yazdırmak için kullanılan bir dil yapısıdır. Baskıdan biraz daha hızlı.

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)

Echo ifadesini parantezle veya parantez olmadan da kullanabilirsiniz

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

Yazdır

Tıpkı echo construct print gibi gerçek bir işlev değil, bir dil yapısıdır. Arasındaki farklar yankı ve baskı olmasıdır baskı sadece tek bir argüman kabul eder ve baskı Oysa 1. döndürür hep yankı geri dönüşü değeri vardır. Dolayısıyla print deyimi ifadelerde kullanılabilir.

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)

Eko gibi , baskı parantez ile veya parantez olmadan kullanılabilir.

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

print_r

Print_r () işlevi, bir değişkene hakkında okunabilir bilgiler yazdırmak için kullanılır. Bağımsız değişken bir dizi ise, print_r () işlevi, anahtarlarını ve öğelerini yazdırır (nesneler için aynıdır).

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

var_dump işlevi genellikle hata ayıklama için kullanılır ve bir değişken / dizi / nesne hakkındaki bilgileri (tür ve değer) yazdırır.

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" }

3

Yankı :

Bu bir işlev değil İade değeri yok

Parantez Gerekli Değil

Diziyi Yazdırmıyor

Yazdır

Gerçek bir işlevdir

Dönüş türü 1

Parantez Gerekli

Diziyi Yazdırmıyor

print_r

Okunabilir biçimde yazdırın

Dize Alıntılar içinde değil

Değil Türü ve hepsi gibi Değişken Detay Bilgileri

var_dump

Değişken tipi ve alt eleman gibi tüm döküm bilgileri


2
Bu cevapla ilgili çok fazla sorun var. printolduğu değil , gerçek bir işlev, sadece yankı gibi bir dil oluşumudur. Ayrıca bir ifade olarak kullanılabilir. echoolduğu değil bir bildiri ne de birinde kullanılabilir. printyok değil parantez gerektiren, ne de her iki yankı yapmak ya da olur bir işlev gibi parantez kullanmak yazdırın. Ayrıca ana farklılıklardan birini kaçırdınız - echo, virgülle ayrılmış yankı için birden fazla dizeyi kabul eder.
thomasrutter

2
... ve birkaç cevabı zaten mevcut olduğunda ve doğru bilgileri içerdiğinde bu cevabı gönderdiniz .
thomasrutter

2

** Yankı, baskı yapamıyorken birden fazla ifadeyi kabul edebilir. Print_r () PHP işlevi, bir diziyi insan tarafından okunabilir biçimde döndürmek için kullanılır. Basitçe şöyle yazılır

![Print_r ($your_array)][1]

2

echo: echo, parantezin kullanılması gerekmediği bir dil yapısıdır ve herhangi bir sayıda parametre alabilir ve geçersizlik döndürebilir.

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

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

print: Parantez kullanılmasına gerek olmayan bir dil yapısıdır, sadece bir parametre alır ve geri döner

    1 always.

           int print(param1);

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

prinf: En az bir dize ve biçim stili alan ve çıktı dizesinin uzunluğunu döndüren bir işlevdir.

    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


0

print_r () değer yazdırabilir, ancak ikinci bayrak parametresi geçildiyse ve DOĞRU ise - yazdırılan sonucu dize olarak döndürür ve hiçbir şey standart çıktıya gönderilmez. Var_dump hakkında. XDebug hata ayıklayıcı kurulursa, çıktı sonuçları çok daha okunabilir ve anlaşılır bir şekilde biçimlendirilir.


-1

ikisi de dil kurguları. echo geçersiz döndürür ve print 1 döndürür. echo yazdırmadan biraz daha hızlı kabul edilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.