2

重複の可能性:
PHPの入れ子関数は何のためにありますか?

PHPでは、次のような入れ子関数の宣言が可能です。

function foo() {
    function bar() {
        return "bar";
    }
    return "foo";
}

しかし、そのような構文のユースケースは何ですか?内部barはグローバル名前空間に配置されるため、ガベージコレクションは行われず、外部関数の外部から使用でき、多くの混乱とバグの可能性があります。たとえばfoo、宣言を。でラップしない限り、2回呼び出すとエラーになりますif(!is_callable('bar'))

ネストされた宣言を使用して条件付き宣言を作成することも、混乱を招くため、適切ではありません。「そこでは完全にうまく機能しているのに、なぜそのような機能がないと不平を言うのですか?!?!」

4

1 に答える 1

6

まあ、条件付き関数宣言はおそらく唯一の正当なユースケースであり、下位互換性のためのフォールバックを提供するためだけにあります。

function makeSureAllDependenciesExist() {
    if (!function_exists('someFunctionThatOnlyExistsInNewerPhpVersions')) {
        function someFunctionThatOnlyExistsInNewerPhpVersions() {
            // fallback implementation here
        }
    }
}

それ以外に、ネストされた関数宣言を使用する理由はほとんどありません。

于 2012-08-14T09:13:52.280 に答える