有没有办法在PHP中的函数内定义函数时避免"重新声明的函数"致命错误?

Art*_*kii 3 php fatal-error

我一直在Wordpress的页面上实现某个插件(dtabs),但在升级到最新版本之后,我发现第二次调用main函数时我现在出错了dtab_list_tabs().

它的工作方式是,插件获取include_once'd但是主要函数被调用,但是很多时候你想在你的布局中放置标签.我有2个这样的电话dtab_list_tabs().

现在,问题是,无论出于何种原因,开发人员决定在dtab_list_tabs()被调用的内部直接包含另一个函数current_tab().因为它是在一个函数中声明的,显然PHP会在第二次调用父函数时尝试重新声明它,这对我没有任何意义.

PHP致命错误: 无法在1638行的.../wp-content/plugins/dtabs/dtabs.php中重新声明current_tab()(之前在.../wp-content/plugins/dtabs/dtabs.php:1638中声明)

该修订的代码位于http://plugins.svn.wordpress.org/!svn/bc/208481/dtabs/trunk/dtabs.php

我想弄清楚的是,是否有办法告诉PHP,是的...它有一个内部函数,据我所知,这是一个完全有效的PHP范例,所以不要重新声明它并失败.

至于手头的情况,我已经删除,current_tab()因为它似乎没有被使用.

Vol*_*erK 5

您可以使用function_exists()来测试是否已定义具有该名称的函数.如果你使定义成为条件(if(something){function foo(){...}})php将仅在条件满足时"评估"定义.

function foo() {
  if ( !function_exists('bar') ) {
    function bar() {
      echo 'bar ';
    }
  }

  bar();
}

foo();
foo();
Run Code Online (Sandbox Code Playgroud)

另见:http://docs.php.net/functions.user-defined

(但我会尽量避免这些事情)

  • @Artem Russakovskii:在这种情况下,发送电子邮件给开发人员并打他的头.致命错误是致命错误,无法解决致命错误.这是致命的原因......我还没有看到任何人避免死亡. (2认同)