php輸出echo、print、print_r、printf、sprintf、var_dump、dump的區別比較
1、echo
echo() 實際上不是一個函數,是php語句,因此您無需對其使用括號。
不過, echo() 只能傳遞一個參數,如果寫多個參數,那麼使用括號會發生解析錯誤。
echo是返回void的,並不返回值,所以不能使用它來賦值。
$a = echo("words"); // 錯誤!不能用來賦值
echo "words"; // words
echo ("words"); // words
echo ("apple","bear"); //發生錯誤,有括號不能傳遞多個參數
echo "I","LOVE","YOU"; // 不用括號的時候可以用逗號隔開多個值, 會輸出 ILOVEYOU 不管是否換行,最終顯示都是爲一行
$name="holle";
echo "$name word"; // 如果 $name = "holle", 則會輸出 holle word.
echo '$name word'; // 由於使用單引號,所以不會輸出$name的值,而是輸出 $name com
2、print
print() 和 echo() 用法一樣,但是echo速度會比print快一點點。
實際上它也不是一個函數,因此您無需對其使用括號。
和echo()一樣,print()只能傳遞一個參數,如果寫多個參數,那麼使用括號會發生解析錯誤。
注意print總是返回1的,這個和echo不一樣, 也就是說可以使用print來賦值,不過沒有實際意義。
$a = print("holle word"); // 這個是允許的
echo $a; // $a的值是1
3、print_r
print_r函數打印關於變量的易於理解的信息。
print_r總是返回1的,也就是說可以使用print_r來賦值,不過沒有實際意義。
將會直接輸出其值,如果變量是一個數組,則會輸出一個格式化後的數組,便於閱讀, 也就是有key和value對應的那種格式。
print_r有兩個參數,第一個是變量,第二個可設爲true,如果設 爲true,則會返回字符串,否則返回布爾值TRUE。
$a="holle word";
$c = print_r($a);
echo $c; // $c的值是1
$d = print_r($a,true);
echo $d; // $c的值是字符串holle word
4、printf
printf函數返回一個格式化後的字符串, 是轉換的格式,以百分比符號 (“%”) 開始到轉換字符結束。
下面是可能的 format 值:
- %% – 返回百分比符號
- %b – 二進制數
- %c – 依照 ASCII 值的字符
- %d – 帶符號十進制數
- %e – 可續計數法(比如 1.5e+3)
- %u – 無符號十進制數
- %f – 浮點數(local settings aware)
- %F – 浮點數(not local settings aware)
- %o – 八進制數
- %s – 字符串
- %x – 十六進制數(小寫字母)
- %X – 十六進制數(大寫字母)
printf("My name is %s %s。","張", "三"); // My name is 張 三。
printf("My name is %1\$s %1\$s","張", "三");// 在s前添加1\$或2\$.....表示後面的參數顯示的位置,此行輸出 My name is 張 三 ,因爲只顯示第一個參數兩次。
printf("My name is %2\$s %1\$s","張", "三"); // My name is 三 張
拓展:sprintf
此函數使用方法和printf一樣,唯一不同的就是該函數把格式化的字符串寫寫入一個變量中,而不是輸出來。
sprintf("My name is %1\$s %1\$s","張", "三"); //你會發現沒有任何東西輸出的。
$a = sprintf("My name is %1\$s %2\$s","張", "三");
echo $a; //輸出 My name is 張 三
5、var_dump
輸出變量的內容、類型或字符串的內容、類型、長度。常用來調試。(可以輸出任何變量)