当外部被多次调用时,php中的嵌套函数会抛出异常

Hil*_*lmi 4 php

以免我假设有以下内容

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)

我认为每个函数调用都会生成一个新的活动记录,它包含自己的范围; 和其他语言一样,当我们在函数中声明一个变量并且调用该函数时,所有变量对于它们的范围都是活的,为什么内部函数不一样?

Nik*_*iko 7

命名函数在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)