PHPは通常、ネストされた関数を使用前に定義する必要があるようです。しかし、require
で動的に構築されたコードには同じ制限がありません。誰もなぜ不一致を説明することができますか?これらのPHPネストされた関数の例はなぜ異なって動作しますか?
編集:明確にするために、私が理解したいことは次のとおりです。例2は、例1のように失敗するのではなく、なぜ機能しますか?
例1
これはファイルnested1.php
の内容である場合:inner()
機能を移動する場合は、しかし、
PHP Fatal error: Call to undefined function inner() in nested1.php on line 3
:php nested1.php
リターンでこれを実行する
<?php
function outer() {
inner();
function inner() {
print "Hello world.\n";
}
}
outer();
?>
次のような関数定義の下を呼び出します。
<?php
function outer() {
function inner() {
print "Hello world.\n";
}
inner();
}
outer();
?>
と再び実行あなたが得る:
Hello world.
例2
これはnested2.php
の内容である場合:
<?php
function outer() {
require "inner.php";
}
outer();
?>
そして、これはinner.php
の内容です:
<?php
inner();
function inner() {
print "Hello world.\n";
}
?>
php nested2.php
リターンでこれを実行する:
Hello world.
あなたは 'nested2を実行しています。 php'と 'nested1.php'とは別に? – nosthertus