首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP「Strict Standards: Only variables should be passed by reference」錯誤原因與修正

     編輯:PHP 相關知識

開啟 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_unshift
  • current、next、prev、end、reset、each
  • shuffle、sort 等陣列排序函式

最佳實踐

  • 任何接受 &$var 引用參數的函式,呼叫時必須傳入「可寫入的變數」。
  • 若不想建立中介變數,可用 array_shift(explode('.', $str)) 替代 reset(array_shift 同樣需引用,故仍需中介變數)。
  • 專案建議關閉 E_STRICT 或升級至 PHP 7+(已移除此 Strict 標準),但修正代碼以相容更好。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved