錯誤訊息「Strict Standards: Only Variables Should Be Passed by Reference」
使用array_shift() 時,可能會報告嚴格標準如果傳遞的參數是函數呼叫的結果,則會發出警告。這種行為看起來不一致,因為它並不總是觸發警告。
考慮以下程式碼:
$el = array_shift($instance->find(..))
在此範例中,引發警告是因為find() 方法不是變數。但是,以下程式碼不會產生警告:
function get_arr(){ return array(1, 2); } $el = array_shift(get_arr());
為了理解這個行為,讓我們分析一個不同的程式碼片段:
error_reporting(E_STRICT); class test { function test_arr(&$a) { var_dump($a); } function get_arr() { return array(1, 2); } } $t = new test; $t->test_arr($t->get_arr());
此程式碼產生嚴格標準警告,因為 $t->get_arr() 方法不是變數且是透過引用傳遞的。此行為是違反直覺的,因為該方法傳回一個陣列值。
要在嚴格模式下避免此錯誤,請更改方法簽章以避免使用引用或使用中間變數:
function test_arr($a) { var_dump($a); } $inter = get_arr(); $el = array_shift($inter);
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3