可能重复:
什么是PHP嵌套函数?
PHP允许嵌套函数声明,如下所示:
function foo() {
function bar() {
return "bar";
}
return "foo";
}
Run Code Online (Sandbox Code Playgroud)
但这种语法的用例是什么?内部bar被放到全局命名空间中,所以它不是垃圾收集的,可以从外部函数外部使用,并提供很多混淆和可能的错误.例如,调用foo两次会导致错误,除非您将声明包装在一个if(!is_callable('bar')).
使用嵌套声明来创建条件声明也不好,因为它会产生混淆."为什么它抱怨没有这样的功能,当它在那里工作得很好?!?!".
好吧,条件函数声明可能是唯一合法的用例,并且只提供后向兼容性的后备:
function makeSureAllDependenciesExist() {
if (!function_exists('someFunctionThatOnlyExistsInNewerPhpVersions')) {
function someFunctionThatOnlyExistsInNewerPhpVersions() {
// fallback implementation here
}
}
}
Run Code Online (Sandbox Code Playgroud)
除此之外,确实没有理由使用嵌套函数声明.