開啟 E_STRICT 後,若將函式回傳值直接傳給需要「引用參數」的函式(如 reset、array_pop、current 等),會拋出此警告。
$str = 'netingcn.com';
echo reset(explode('.', $str)); // explode 回傳陣列非變數,無法被引用
reset(array &$array) 定義要求參數為變數引用。explode 回傳的是暫時陣列值,非變數,故不符合引用需求。
$parts = explode('.', $str); // 先存入變數
echo reset($parts); // 再傳入變數引用
array_pop、array_push、array_shift、array_unshiftcurrent、next、prev、end、reset、eachshuffle、sort 等陣列排序函式&$var 引用參數的函式,呼叫時必須傳入「可寫入的變數」。array_shift(explode('.', $str)) 替代 reset(array_shift 同樣需引用,故仍需中介變數)。E_STRICT 或升級至 PHP 7+(已移除此 Strict 標準),但修正代碼以相容更好。