首頁 > 後端開發 > php教程 > 為什麼 `array_shift()` 會觸發「嚴格標準:只有變數應該透過引用傳遞」?

為什麼 `array_shift()` 會觸發「嚴格標準:只有變數應該透過引用傳遞」?

Susan Sarandon
發布: 2025-01-03 17:27:43
原創
951 人瀏覽過

Why Does `array_shift()` Trigger

錯誤訊息「嚴格標準:只有變數應該透過引用傳遞」

使用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);
登入後複製

以上是為什麼 `array_shift()` 會觸發「嚴格標準:只有變數應該透過引用傳遞」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板