標籤:

PHP echo,print,print_r,var_dump 區別

PHP echo,print,print_r,var_dump 區別

來自專欄編碼前線

PHP echo(),print(),print_r(),var_dump() 區別解析


echo

echo是語言結構(language construct),而並不是真正的函數,沒有返回值。特點:

  • 和print唯一不同之處,echo接受參數列表。
  • 輸出多個參數,不換行。
  • 注意:如果參數中包含變數,需要使用雙引號指明參數,否則輸出的是變數名,而不是變數值。如下所示:

<?php $a = echo("55nav"); // 錯誤!不能用來賦值 echo "55nav"; // 55nav echo ("55nav"); // 55nav echo ("55nav","com"); //發生錯誤,有括弧不能傳遞多個參數 echo "55nav"," com"," is", " web"; // 不用括弧的時候可以用逗號隔開多個值, 會輸出 55nav com is web echo "55nav is 8 good 9 web."; // 不管是否換行,最終顯示都是為一行 55nav is good web. $fistname="55nav"; echo "$fistname com"; // 如果 $firstname = "55nav", 則會輸出 55nav com. echo $firstname com; // 由於使用單引號,所以不會輸出$firstname的值,而是輸出 $firstname com

print()

pirnt()實際上也不是函數(而是語言結構),所以可以不用圓括弧包圍參數列表。

特點:

  • 和echo的唯一區別:print()只支持一個參數
  • 和echo的第三點一樣,即是:如果參數中包含變數,需要使用雙引號指明參數,否則輸出的是變數名,而不是變數值。如下所示:

<?php print "bar is $bar"; //bar is barbaz print bar is $bar; //bar is $bar //多個參數會報錯 print 1,abc,cdef; //Parse error: syntax error, unexpected , in /Users/nancheng/www/test.php on line 3 $a = print("55nav"); // 這個是允許的 echo $a; // $a的值是1

printf()

printf函數返回一個格式化後的字元串。

參數 format 是轉換的格式,以百分比符號 (「%」) 開始到轉換字元結束。下面是可能的 format 值:

  • %% – 返回百分比符號
  • %b – 二進位數
  • %c – 依照 ASCII 值的字元
  • %d – 帶符號十進位數
  • %e – 可續計數法(比如 1.5e+3)
  • %u – 無符號十進位數
  • %f – 浮點數(local settings aware)
  • %F – 浮點數(not local settings aware)
  • %o – 八進位數
  • %s – 字元串
  • %x – 十六進位數(小寫字母)
  • %X – 十六進位數(大寫字母) arg1, arg2, arg++ 等參數將插入到主字元串中的百分號 (%) 符號處。該函數是逐步執行的,在第一個 % 符號中,插入 arg1,在第二個 % 符號處,插入 arg2,依此類推。如果 % 符號多於 arg 參數,則您必須使用佔位符。佔位符被插入 % 符號之後,由數字和 「$」 組成。

例如:

<?php printf("My name is %s %s。","55nav", "com"); // My name is 55nav com。 printf("My name is %1$s %1$s","55nav", "com"); // 在s前添加1$或2$.....表示後面的參數顯示的位置,此行輸出 My name is 55nav 55nav因為只顯示第一個參數兩次。 printf("My name is %2$s %1$s","55nav", "com"); // My name is com 55nav

sprintf()

此函數使用方法和printf一樣,唯一不同的就是該函數把格式化的字元串寫寫入一個變數中,而不是輸出來。

<?php sprintf("My name is %1$s %1$s","55nav", "com"); //你會發現沒有任何東西輸出的。 $out = sprintf("My name is %1$s %2$s","55nav", "com"); echo $out; //輸出 My name is 55nav com

print_r()

可以把字元串和數字簡單地列印出來,而數組則以括起來的鍵和值得列表形式顯示,並以Array開頭。但print_r()輸出布爾值和NULL的結果沒有意義,因為都是列印"
"。因此用var_dump()函數更適合調試。

print_r() 返回值是布爾型的,參數是mix類型的,可以是字元串,整形,數組,對象類print_r() 顯示關於一個變數的易於理解的信息。如果給出的是 string、integer 或 float,將列印變數值本身。如果給出的是 array,將會按照一定格式顯示鍵和元素。object 與數組類似。

print_r() 將把數組的指針移到最後邊。

<?php print_r("
abcdef"); $a="55nav"; $c = print_r($a); echo $c; // $c的值是TRUE $c = print_r($a,true); echo $c; // $c的值是字元串55nav

var_dump()

判斷一個變數的類型與長度,並輸出變數的數值,如果變數有值輸的是變數的值並回返數據類型。此函數顯示關於一個或多個表達式的結構信息,包括表達式的類型與值。數組將遞歸展開值,通過縮進顯示其結構。

<?php $arr = [1,2,3,4]; var_dump($arr);

var_dump()和print_r()的區別

共同點:兩者都可以列印數組,對象之類的複合型變數。

區別:print_r() 只能列印一些易於理解的信息,且print_r()在列印數組時,會將把數組的指針移到最後邊,使用 reset() 可讓指針回到開始處。 而var_dump()不但能列印複合類型的數據,還能列印資源類型的變數。且var_dump()輸出的信息則比較詳細,一般調試時用得多。

推薦閱讀:

TAG:PHP | PHP學習 |