你們在面試中,常常會被問到的問題:php
請簡要說明PHP的打印方式都有哪些?面試
或者直接點問:數組
請說明echo、print、print_r的區別函數
看着很簡單,通常會出如今初中級的筆試題中。可是要真正說明白這些語言結構或者函數也不是那麼簡單的事情。今天咱們就來好好看看這些打印輸出相關的內容。測試
最基礎的輸出語句,不是函數是語言結構,不須要括號。可使用參數列表,用逗號分隔。但若是加了括號就不能用逗號分隔着輸出了。沒有返回值。spa
echo 'fullstackpm'; // 正常輸出:fullstackpm
echo 'fullstackpm', ' is ', 'Good!'; // 正常輸出:fullstackpm is Good!
echo ('fullstackpm'); // 正常輸出:fullstackpm
echo ('fullstackpm', ' is ', 'Good!'); // 報錯了
複製代碼
基本和echo同樣,可是不支持參數列表,有返回值。返回值永遠是1。code
由於有返回值,因此相對來講效率不如echo對象
print 'fullstackpm'; // 正常輸出:fullstackpm
print 'fullstackpm', ' is ', 'Good!'; // 錯誤
$r = print ('fullstackpm'); // 正常輸出:fullstackpm
print $r; // 輸出1
複製代碼
兩個很高大上的函數,能夠格式化輸出字符串。用%標明佔位符,後面的參數對應進行佔位符的替換。printf和sprintf的區別就是前者直接進行了輸出,然後者是將字符串進行了函數返回。請看實例。文檔
$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); // 這裏不會輸出
print $s; // 輸出:My name is WoW, I'm 12 years old.
複製代碼
你最少要記住的,%s表明字符串,%d表明數字,%f是浮點數,%%是輸出%自己,其餘還有許多類型能夠查看相關文檔。另外還有相似的幾個:字符串
很是經常使用的一個函數,能夠格式化的輸出數組或對象。注意第二個參數設置爲true,能夠不直接輸出而是進行函數返回。
$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); // 此處不會輸出
echo $s;
// 輸出
// 注意,輸出流不在ob_start()中,測試本段請不要有其餘任何輸出
/** Array ( [0] => a [1] => b [3] => c [show] => d ) */
複製代碼
var_dump也是很是經常使用的一個函數,用來顯示結構信息,包括類型與值,數組對象都會展開,用縮進表示層次。var_exports與之不一樣的地方在於var_exports返回的內容是正常的PHP代碼,能夠直接使用,而且有和print_r相似的第二個return參數,做用也相似。
$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', ) */
複製代碼