PHP中嵌套函数声明的用例是什么?

Mas*_*sse 2 php

可能重复:
什么是PHP嵌套函数?

PHP允许嵌套函数声明,如下所示:

function foo() {
    function bar() {
        return "bar";
    }
    return "foo";
}
Run Code Online (Sandbox Code Playgroud)

但这种语法的用例是什么?内部bar被放到全局命名空间中,所以它不是垃圾收集的,可以从外部函数外部使用,并提供很多混淆和可能的错误.例如,调用foo两次会导致错误,除非您将声明包装在一个if(!is_callable('bar')).

使用嵌套声明来创建条件声明也不好,因为它会产生混淆."为什么它抱怨没有这样的功能,当它在那里工作得很好?!?!".

dec*_*eze 6

好吧,条件函数声明可能是唯一合法的用例,并且只提供后向兼容性的后备:

function makeSureAllDependenciesExist() {
    if (!function_exists('someFunctionThatOnlyExistsInNewerPhpVersions')) {
        function someFunctionThatOnlyExistsInNewerPhpVersions() {
            // fallback implementation here
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

除此之外,确实没有理由使用嵌套函数声明.