今天在練習一個小demo的時候,在localhost文件中出現了這樣的notice,具體的原因和解決方法做如下分析。
題目:已知一個字符串如下,將其最后兩項轉換為數組。
$week = "Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday";
主要的思路:1. 先使用explode()函數將字符串進行分割,因該函數的結果會返回一個數組,所以分割的部分會獨立的存入該數組中。
2. 再使用array_splice()函數,返回從某個位置開始,包含有被移除單元的數組。
解答如下:
$week1 = "Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday"; $str = array_splice(explode(",", $week1), -2); echo '<pre>'; print_r($str); echo '</pre>'; echo '<br/>';
輸出結果:
發現php給出了這樣的一個提示。
上網查了一下,發現其大致意思是:只有變量才能通過引用傳遞。沒看明白,繼續查。
最終發現,PHP5.3以上默認只能傳遞具體的變量,而不能通過函數返回的值傳遞變量。
上述代碼中,
explode(",", $week1);
這一句代碼,其本身不能作為變量進行引用(reference)。
所以代碼應該做如下改變:
$week2 ="Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday"; $str = explode(",", $week2); echo "<br/>"; echo '<pre>'; print_r($str); echo '</pre>'; echo '<br/>'; $array = array_splice($str,-2); echo '<pre>'; print_r($array); echo '</pre>';
輸出結果:
發現提示消失,正常輸出結果。
其實,使提示消失的方法還有一種,就是使用
error_reporting(0); 關閉所有notice和warning級別的錯誤。
雖然關閉錯誤報告確實能不鬧心,但盲目的忽視錯誤卻是致命的。