ホームページ > バックエンド開発 > PHPチュートリアル > PHP の入れ子関数は、それを囲んでいるスコープの外で呼び出すことができますか?

PHP の入れ子関数は、それを囲んでいるスコープの外で呼び出すことができますか?

DDD
リリース: 2024-10-29 01:05:29
オリジナル
589 人が閲覧しました

Can PHP Nested Functions Be Called Outside Their Enclosing Scope?

ネストされた PHP 関数: 目的と使用法

PHP の領域では、ネストされた関数はコードのカプセル化と編成の要素を導入します。 PHP の入れ子関数は、JavaScript の関数ほど普及していないかもしれませんが、特定のシナリオでそのニッチな用途を見つけます。

次の例を考えてみましょう。

<code class="php">function outer($msg)
{
    function inner($msg)
    {
        echo 'inner: ' . $msg . ' ';
    }

    echo 'outer: ' . $msg . ' ';
    inner($msg);
}

inner('test1'); // Fatal error: Call to undefined function inner()
outer('test2'); // outer: test2 inner: test2
inner('test3'); // inner: test3
outer('test4'); // Fatal error: Cannot redeclare inner()</code>
ログイン後にコピー

ご覧のとおり、次のことを実行しようとすると、 inner() 関数を external() 関数の外側で直接呼び出すと、outer() 関数のスコープに制限されているため、致命的なエラーが発生します。この動作は、レキシカル スコープの概念と一致しています。ネストされた関数は、それを囲んでいる関数のスコープを継承し、そのスコープの外からはアクセスできません。

PHP 5.3 以降を使用している場合は、より JavaScript のような動作を実現するための匿名関数:

<code class="php">function outer()
{
    $inner = function() {
        echo "test\n";
    };

    $inner();
}

outer();
outer();

inner(); // PHP Fatal error: Call to undefined function inner()
$inner(); // PHP Fatal error: Function name must be a string</code>
ログイン後にコピー

出力:

test
test
ログイン後にコピー

この例では、匿名関数 $inner が external() 関数内で定義されており、そのスコープへのアクセス。ただし、そのスコープに制限されたままであり、グローバル スコープから直接呼び出すことはできません。

以上がPHP の入れ子関数は、それを囲んでいるスコープの外で呼び出すことができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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