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

标签 php

以免假设我有以下内容

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/

相关文章:

php - 推特 OAuth : users/search works but search/tweets does not

php - 错误日志在 laravel 5.3 中被截断

javascript - 如何将 php 元素转换为 javascript

php - 如何将数据库查询结果集作为对象组进行管理?

php - 为什么 PHP session_destroy() 不起作用?

PHP 数组重构

php - jquery mobile登录和访问/拒绝页面

php - PHP 脚本中的 SED 命令(错误表达式 #1,char 34 : Invalid preceding regular expression)

PHP:MY​​SQL 查询返回错误值

php - Woocommerce - 显示循环内的变化