以免我假设有以下内容
function a(){
function b(){}
}
a(); //pass
a(); //error
Run Code Online (Sandbox Code Playgroud)
为什么在第二次调用中抛出一个异常,它说
cannot re-declare function b()
Run Code Online (Sandbox Code Playgroud)
我认为每个函数调用都会生成一个新的活动记录,它包含自己的范围; 和其他语言一样,当我们在函数中声明一个变量并且调用该函数时,所有变量对于它们的范围都是活的,为什么内部函数不一样?
命名函数在PHP中始终是全局的.因此,您需要检查是否已创建功能B:
function A() {
if (!function_exists('B')) {
function B() {}
}
B();
}
Run Code Online (Sandbox Code Playgroud)
另一种解决方案是使用匿名函数(这更有可能满足您的需求,因为函数现在存储在变量中,因此在A的函数范围内是本地的):
function A() {
$B = function() {};
$B();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
579 次 |
| 最近记录: |