|
大家在面試中,經(jīng)常會(huì)被問到的問題: 請(qǐng)簡要說明PHP的打印方式都有哪些?
或者直接點(diǎn)問: 請(qǐng)說明echo、print、print_r的區(qū)別
看著很簡單,一般會(huì)出現(xiàn)在初中級(jí)的筆試題中。但是要真正說明白這些語言結(jié)構(gòu)或者函數(shù)也不是那么簡單的事情。今天我們就來好好看看這些打印輸出相關(guān)的內(nèi)容。 echo最基礎(chǔ)的輸出語句,不是函數(shù)是語言結(jié)構(gòu),不需要括號(hào)。可以使用參數(shù)列表,用逗號(hào)分隔。但如果加了括號(hào)就不能用逗號(hào)分隔著輸出了。沒有返回值。 echo 'fullstackpm'; // 正常輸出:fullstackpm echo 'fullstackpm', ' is ', 'Good!'; // 正常輸出:fullstackpm is Good! echo ('fullstackpm'); // 正常輸出:fullstackpm echo ('fullstackpm', ' is ', 'Good!'); // 報(bào)錯(cuò)了
print基本和echo一樣,但是不支持參數(shù)列表,有返回值。返回值永遠(yuǎn)是1。 因?yàn)橛蟹祷刂担韵鄬?duì)來說效率不如echo print 'fullstackpm'; // 正常輸出:fullstackpm print 'fullstackpm', ' is ', 'Good!'; // 錯(cuò)誤 $r = print ('fullstackpm'); // 正常輸出:fullstackpm print $r; // 輸出1
printf和sprintf兩個(gè)很高大上的函數(shù),可以格式化輸出字符串。用%標(biāo)明占位符,后面的參數(shù)對(duì)應(yīng)進(jìn)行占位符的替換。printf和sprintf的區(qū)別就是前者直接進(jìn)行了輸出,而后者是將字符串進(jìn)行了函數(shù)返回。請(qǐng)看實(shí)例。 $str = 'My name is %s, I\'m %d years old.'; printf($str, 'fullstackpm', 1002); // 直接輸出:My name is fullstackpm, I'm 1002 years old.
$s = sprintf($str, 'WoW', 12); // 這里不會(huì)輸出 print $s; // 輸出:My name is WoW, I'm 12 years old.
你最少要記住的,%s代表字符串,%d代表數(shù)字,%f是浮點(diǎn)數(shù),%%是輸出%本身,其他還有許多類型可以查看相關(guān)文檔。另外還有類似的幾個(gè): vprintf,他的第二個(gè)參數(shù)是一個(gè)數(shù)組,不是可變長度的參數(shù)。 sscanf,對(duì)于一些特殊字符處理方式不同。 fscanf,從文檔中讀取并進(jìn)行格式化。
print_r非常常用的一個(gè)函數(shù),可以格式化的輸出數(shù)組或?qū)ο蟆W⒁獾诙€(gè)參數(shù)設(shè)置為true,可以不直接輸出而是進(jìn)行函數(shù)返回。 $str = [ "a", 1 => "b", "3" => "c", "show"=>'d' ];
print_r($str) // 輸出 /** Array ( [0] => a [1] => b [3] => c [show] => d ) */
$s = print_r($str, true); // 此處不會(huì)輸出 echo $s; // 輸出 // 注意,輸出流不在ob_start()中,測(cè)試本段請(qǐng)不要有其他任何輸出 /** Array ( [0] => a [1] => b [3] => c [show] => d ) */
var_dump和var_exportsvar_dump也是非常常用的一個(gè)函數(shù),用來顯示結(jié)構(gòu)信息,包括類型與值,數(shù)組對(duì)象都會(huì)展開,用縮進(jìn)表示層次。var_exports與之不同的地方在于var_exports返回的內(nèi)容是正常的PHP代碼,可以直接使用,并且有和print_r類似的第二個(gè)return參數(shù),作用也類似。 $str = [ "a", 1 => "b", "3" => "c", "show"=>'d' ];
var_dump($str); // 輸出 /** array(4) { [0] => string(1) "a" [1] => string(1) "b" [3] => string(1) "c" 'show' => string(1) "d" } */
var_export($str); // 輸出 /** array ( 0 => 'a', 1 => 'b', 3 => 'c', 'show' => 'd', ) */
|