Heim >Backend-Entwicklung >PHP-Tutorial >Können in PHP verschachtelte Funktionen außerhalb ihres umschließenden Bereichs aufgerufen werden?
Verschachtelte PHP-Funktionen: Zweck und Verwendung
Im Bereich PHP führen verschachtelte Funktionen ein Element der Codekapselung und -organisation ein. Obwohl sie möglicherweise nicht so allgegenwärtig sind wie ihre JavaScript-Gegenstücke, finden verschachtelte PHP-Funktionen in bestimmten Szenarien ihre Nische.
Betrachten Sie dieses Beispiel:
<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>
Wie Sie beobachten können, wenn Sie es versuchen Wenn Sie die Funktion inner() direkt außerhalb der Funktion OUTER() aufrufen, führt dies zu einem schwerwiegenden Fehler, da sie auf den Bereich der Funktion OUTER() beschränkt ist. Dieses Verhalten steht im Einklang mit dem Konzept des lexikalischen Bereichs, bei dem eine verschachtelte Funktion den Bereich ihrer umschließenden Funktion erbt und nicht von außerhalb dieses Bereichs aufgerufen werden kann.
Wenn Sie mit PHP 5.3 oder höher arbeiten, können Sie dies nutzen anonyme Funktionen, um ein JavaScript-ähnlicheres Verhalten zu erreichen:
<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>
Ausgabe:
test test
In diesem Beispiel ist die anonyme Funktion $inner innerhalb der Funktion „outer()“ definiert und hat Zugriff auf seinen Anwendungsbereich. Es bleibt jedoch auf diesen Bereich beschränkt und kann nicht direkt aus dem globalen Bereich aufgerufen werden.
Das obige ist der detaillierte Inhalt vonKönnen in PHP verschachtelte Funktionen außerhalb ihres umschließenden Bereichs aufgerufen werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!