PHPクロージャ変数のスコープ

藏色散人
リリース: 2023-04-08 06:54:01
転載
2393 人が閲覧しました

プロジェクトではクロージャの形式に遭遇するのは避けられませんが、クロージャでは変数のスコープは何でしょうか?以下に簡単な例をいくつか示します。

#e1

function test_1()
{
    $a = 'php';
    $func =  function ($b) use ($a)
    {
       // $a = 'java';
        echo $b.'_'.$a;
    };
    return $func;
}
$test = test_1();
$test('hello');
ログイン後にコピー

上記の結果では hello_php が出力され、無名関数 func をパラメータとして使用することで $a が変数として渡されることがわかります。 ; $ a = 'java' コメントを削除すると、上記の結果が出力されます hello_java

e2: 上記の関数を

function test_2()
{
    $a = 'php';
    $func =  function ($b) use ($a)
    {
       // $a = 'go';
        echo $b.'_'.$a;
    };
    $a = 'java';
    return $func;
}
$test = test_2();
$test('hello');
ログイン後にコピー

として書き換えると、上記の結果が出力されますhello_php. 説明はtest_2にあります。 $a に2回目に値が代入されるとき、その値は func 関数には渡されません。

同様に、$a = 'go' が削除された場合、上記の結果は hello_go

e3 を出力します。$a

function test_3()
{
    $a = 'php';
    $func =  function ($b) use (&$a)
    {
        //$a = 'go';
        echo $b.'_'.$a;
    };
    $a = 'java';
    return $func;
}
$test = test_3();
$test('hello');
ログイン後にコピー
# への参照を追加します。 # #上記の結果は hello_java を出力し、アドレスが参照されるときに変数 a の値が関数 func に渡されることを示します。

同様に、$a = 'go' が削除された場合;

上記の結果は hello_go を出力します;

上記の 3 つの簡単なテストは、クロージャを明確に説明しています。 パラメータのスコープ内部。

アドレス参照を使用しない場合、外部変数が変化しても無名関数の変数値は変化しません。 (クロージャの意味)

アドレス参照使用後は、外部関数のパラメータ値によってパラメータ値が変更されます。

PHP 関連の知識について詳しくは、

PHP チュートリアル をご覧ください。

以上がPHPクロージャ変数のスコープの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:segmentfault.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!