ホームページ >バックエンド開発 >PHPチュートリアル >PHP の入れ子関数は、それを囲んでいるスコープの外で呼び出すことができますか?
ネストされた 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 サイトの他の関連記事を参照してください。