echo、print、print_r、var_dump、printf、sprintf 和 vsprintf 的區別
阿新 • • 發佈:2018-12-31
1. echo
echo 是一個語言結構,可以輸出標量型別的資料,如int、float、string。沒有返回值。
2. print( )
print 是一個函式,可以輸出標量型別的資料,如int、float、string。有返回值,總是返回1。
3. print_r( )
print_r( ) 是一個函式,可以列印關於變數的易於理解的資訊,不僅可以列印標量型別的變數,還可以列印複合型別的變數,如array、object。有返回值,型別為bool。
4. var_dump( )
var_dump( ) 是一個函式可以列印關於變數的較為詳細的資訊,如變數值的型別。不僅可以列印標量型別的變數,還可以列印複合型別的變數,如array、object。返回值為NULL。
5. printf(
)
printf( ) 輸出格式化的字串,有返回值,返回值是輸出的字串的長度。
如:printf('%s', 'abc');
// abc 定義格式為按照字串形式直接輸出。
printf("%.0f",905.453); // 905
定義格式為按照浮點數形式輸出,保留小數點後0位小數。(會四捨五入)
printf("%.1f",905.453);
// 905.5 定義格式為保留小數點後1位小數。
printf("%.2f",905.453); // 905.45
printf("%f",905.453);
// 905.453000 輸出浮點數時,預設保留小數點後6位小數。
printf("%03d",4);
// 004 定義格式為,按照十進位制形式輸出整數,整數位數為3,不足的部分用0填充。
6. sprintf()
sprintf() 返回格式化的字串。也就是說,這個函式僅僅是把格式化的字串返回,但不會輸出。
stringsprintf(string$format[,mixed
$args [,mixed $...]] )
引數$format和printf( )中的$format用法一致。下面進行詳細解說:
每一個格式化規範,都會包含一個百分號%,且以百分號開頭,以型別說明符結尾。中間可以有其他的修飾說明符。
引數$format中可以有多個格式化規範,從而對多個字串依次進行格式化。
注意:兩個百分號,表示百分號本身,相當於轉義了,也就是說兩個百分號就不再是格式化規範的起始符,僅僅表示一個字面上的百分符號。
每個格式化規範的組成元素,包含以下幾種:(按順序列出)
起始符:格式化規範的起始符,是一個百分符號% 必選
符號說明符:強制修飾格式化後的數值的正(+)或者負(-),預設負數格式化後前面用-修飾,正數不用修飾。 可選
填充說明符:格式化為指定的長度時,如果長度不足,用填充符前置填充到指定的長度,常用的填充符是0,預設的填充符是空格。 可選
對齊說明符:修飾格式化後的結果的對齊方式,預設是右對齊,字元a代表左對齊。 可選
長度說明符:指定轉換格式後的結果的最小字元數(最小長度)。 可選
精度說明符:指定保留小數點後小數的位數(超出的部分會四捨五入),形式為小數點後緊跟一個數字。 可選
型別說明符:格式化規範的結尾符,指定引數資料應當做什麼資料型別對待,也就是說按照何種型別格式轉化。 必選
常用的型別說明符,有以下幾種:
b: 代表二進位制整數,binary的首字母
d: 代表十進位制整數,decimal的首字母
e: 代表科學計數法
u: 代表無符號的十進位制整數,unsigned的首字母
f: 代表浮點數,float的首字母
o: 代表八進位制整數,octal的首字母
s: 代表字串,string的首字母
x: 代表十六進位制整數,小寫字母,hexadecimal
X:代表十六進位制整數,大寫字母,hexadecimal
舉例說明:
list($year,$month,$day) = explode("-", "2015-9-28");
$result = sprintf("%04d-%02d-%02d", $year, $month, $day);
var_dump($result); // string(10)
"2015-09-28"
echo "<hr/>";
printf("%04d-%02d-%02d", $year, $month, $day); // 2015-09-28
7. vsprintf( ) vsprintf( ) 返回格式化的字串。和sprintf( )的區別是,vsprintf( )的第二個引數是陣列。 stringvsprintf(string$format,array$args) 引數$format的用法和上面一致,只不過vsprintf( )的第二個引數是陣列。vsprintf( )會對陣列中的每個元素,依次格式化轉換。 $result = vsprintf("%04d-%02d-%02d", explode("-", "2015-9-28")); var_dump($result); // string(10) "2015-09-28"
7. vsprintf( ) vsprintf( ) 返回格式化的字串。和sprintf( )的區別是,vsprintf( )的第二個引數是陣列。 stringvsprintf(string$format,array$args) 引數$format的用法和上面一致,只不過vsprintf( )的第二個引數是陣列。vsprintf( )會對陣列中的每個元素,依次格式化轉換。 $result = vsprintf("%04d-%02d-%02d", explode("-", "2015-9-28")); var_dump($result); // string(10) "2015-09-28"