代码之家  ›  专栏  ›  技术社区  ›  Artem Russakovskii

在PHP中定义函数时,有没有一种方法可以避免“重新声明的函数”的致命错误?

  •  2
  • Artem Russakovskii  · 技术社区  · 15 年前

    我已经在WordPress的页面上实现了一个插件(DTabs),但是在升级到最新版本之后,我发现第二次调用名为 dtab_list_tabs() .

    它的工作方式是,插件会被包含一次,但是主函数会被调用,不管您想在布局中放置选项卡多少次。我有两个这样的电话 dtab_列出_选项卡()。 .

    现在,问题是,无论出于什么原因,开发人员决定直接在内部包含另一个函数 dtab_列出_选项卡()。 打电话 current_tab() .因为它是在一个函数中声明的,显然PHP在第二次调用父函数时就试图重新声明它,这对我来说没有任何意义。

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

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

    我想知道的是是否有一种方法可以告诉PHP是的…它有一个内部函数,据我所知,这是一个完全有效的PHP范例,所以不要重新声明它并失败。

    至于目前的情况,我已经撤走了 当前进程表() 因为它似乎没用过。

    3 回复  |  直到 12 年前
        1
  •  5
  •   VolkerK    15 年前

    你可以使用 function_exists() 测试是否已定义具有该名称的函数。如果将定义设为条件(if(something)function foo()…),则只有在满足条件时,PHP才会“评估”定义。

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

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

    (但我会尽量避免这样的事情发生)

        2
  •  3
  •   Andrew Moore    15 年前

    您可以将函数声明包装在 if 语句。使用 function_exists() 查看函数是否已声明。

    if(!function_exists('current_tab')) {
      function current_tab() {
        myMagicCode();
      }
    }
    
        3
  •  1
  •   Mike B    15 年前

    您可以尝试以下操作:

    if (!function_exists('my_function')) {
      function my_function() {
    
      }
    }
    

    function_exists() -如果给定函数已定义,则返回true