无法重新声明功能错误

时间:2011-05-12 17:36:30

标签: php

function getContactActiveEmails($eid)
{
    global  $db;

    if ($eid) {
        $sql = "SELECT email FROM activeEmails WHERE id = $eid";
        return $db->GetCol($sql);
    }
}

我收到错误“无法重新声明功能getContactActiveEmails

它给出的行号是函数的最后一行 - }

使用require_once调用所有文件。这是整个代码库中唯一定义getContactActiveEmails的地方。这是为什么?

4 个答案:

答案 0 :(得分:6)

从错误中可以清楚地看出,你的函数被定义了两次,因此你得到了错误。

我建议在声明之前检查函数是否已定义。

if (!function_exists('getContactActiveEmails'))
{
   function getContactActiveEmails($eid)
   {
      global  $db;

     if ($eid) {
         $sql = "SELECT email FROM activeEmails WHERE id = $eid";
         return $db->GetCol($sql);
     }
   }
}

答案 1 :(得分:4)

@Shakti Singh的解决方案可以解决,但请记住,你正在失去对代码的控制权 - 你不知道这个函数在哪里被声明,它返回了什么,所以我建议你去寻找它

  1. 尝试不区分大小写的搜索,默认情况下,许多文本编辑器和IDE搜索区分大小写,并且您的函数也可以在某处声明为getcontactactiveemails
  2. 如果仍然没有运气,请使用Reflection扩展名
  3. 让php说出此功能

    反射的使用示例:

    if(function_exists('getContactActiveEmails')){
        $myfunc = new ReflectionFunction('getContactActiveEmails');
        echo 'Function is declared in '.$myfunc->getFileName().
             ' starting from line '.$myfunc->getStartLine().
             ' to '.$myfunc->getEndLine();
        die;
    }
    

    有关Reflection

    的更多信息

答案 2 :(得分:0)

我遇到了同样的问题。我有一个名为adhoc.inc.php的标准文件,它被导入到我网站上的几乎每个php文件中。由于没有对任何代码进行任何更改,我开始看到错误

[13-Jul-2013 21:19:22 Australia/Sydney] PHP Fatal error:  Cannot redeclare checkloggedin() in /Applications/MAMP/htdocs/mycobber/util/adhoc.inc.php on line 4

最初我只在几个文件中得到它所以我只是注释掉了这个导入并且它有效。突然间,再没有任何变化,我在我加载的每个文件中都得到了这个。我认为这不是我所以我重新启动了我的MAMP服务器(apache和mysql)然后它就消失了。

有没有人见过这个?

答案 3 :(得分:0)

如果您在循环中定义了函数,则会发生此错误,因为您在每次迭代中都尝试定义它。