以免假设我有以下内容
function a(){
function b(){}
}
a(); //pass
a(); //error
为什么在第二次调用中抛出异常并显示
cannot re-declare function b()
我认为每个函数调用都会产生一个新的事件记录,它包含自己的范围; 与 PHP 以外的其他语言一样,当我们在函数中声明一个变量并调用该函数时,所有变量在其作用域内都是有效的,为什么内部函数不一样?
最佳答案
命名函数在 PHP 中始终是全局的。因此,您需要检查函数 B 是否已经创建:
function A() {
if (!function_exists('B')) {
function B() {}
}
B();
}
另一种解决方案是使用匿名函数(这更可能满足您的需求,因为该函数现在存储在变量中,因此在 A 的函数范围内):
function A() {
$B = function() {};
$B();
}
关于php - 当多次调用外部函数时,php 中的嵌套函数会抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11968031/