「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > `array_shift()` が「厳格な標準: 変数のみが参照によって渡されるべきである」をトリガーするのはなぜですか?

`array_shift()` が「厳格な標準: 変数のみが参照によって渡されるべきである」をトリガーするのはなぜですか?

2024 年 12 月 21 日に公開
ブラウズ:906

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);
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3