ホームページ > バックエンド開発 > PHPチュートリアル > PHP が「参照によって変数のみを渡す必要がある」という警告を発行するのはなぜですか?また、その警告はどのように解決できますか?

PHP が「参照によって変数のみを渡す必要がある」という警告を発行するのはなぜですか?また、その警告はどのように解決できますか?

Mary-Kate Olsen
リリース: 2025-01-03 22:46:42
オリジナル
669 人が閲覧しました

Why Does PHP Issue

厳格な標準の警告:「変数のみが参照によって渡されるべきである」について理解する

PHP では、厳格な標準の警告「変数のみが参照によって渡されるべきである」がトリガーされます。関数またはメソッドへの参照によって非変数を渡そうとしたとき。

の説明動作

次のコードを考えてみましょう:

$el = array_shift($instance->find());
ログイン後にコピー

$instance->find() が変数ではない配列を返すため、このコードは厳密な標準の警告を生成します。引数として渡されると、(& 演算子を使用して) 配列を参照によって渡そうとするため、警告がトリガーされます。

ただし、次のコードでは:

function get_arr(){
    return array(1, 2);
}
$el = array_shift(get_arr());
ログイン後にコピー

厳格な標準get_arr() は配列を返す関数であるため、警告は報告されません。したがって、これは単なる配列値ではなく変数として扱われます。

根本原因

厳密な標準の警告は、特にメソッドまたは関数が呼び出され、その戻り値が次のような状況で発生します。参照によって渡されました。たとえば、次のコードを考えてみましょう。

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() が変数ではない配列を返すため、厳密な標準の警告が生成されます。ただし、これは & 演算子を使用して test_arr メソッドへの参照によって渡されます。

解決策

厳格な標準の警告を解決するには、次の 2 つの方法が考えられます。

  1. メソッド シグネチャの変更: 参照パラメータを使用しないようにメソッドのシグネチャを変更します。例:
function test_arr($a) {
    var_dump($a);
}
ログイン後にコピー
  1. 中間変数を使用する: 中間変数を作成し、メソッドの戻り値をそれに割り当て、中間変数を参照渡しします。例:
$inter = $instance->find();
$el = array_shift($inter);
ログイン後にコピー

以上がPHP が「参照によって変数のみを渡す必要がある」という警告を発行するのはなぜですか?また、その警告はどのように解決できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート