【问题标题】:Fatal error: Cannot redeclare getteampoints() (previously declared in [closed]致命错误:无法重新声明 getteampoints()(之前在 [关闭] 中声明
【发布时间】:2013-04-10 10:37:50
【问题描述】:

获得了以下函数,并且之前没有声明 getteampoints 值。尝试关注其他重新声明错误问题,但没有一个有效。我该如何解决这个问题?

function getTeamPoints($team)
    {
        $query = mysql_query("SELECT * FROM Team_comp WHERE t_id='$team'");
        $team_array = array();

        while($a = mysql_fetch_array($query))
        {
            $team_array = array(            'home_won'  =>  $a['home_win'],
                                            'home_draw' =>  $a['home_tie'],
                                            'home_lost' =>  $a['home_lost'],
                                            'away_won'  =>  $a['away_win'],
                                            'away_draw' =>  $a['away_tie'],
                                            'away_lost' =>  $a['away_lost'],
                                            'home_games'=>  $a['home_games'],
                                            'away_games'=>  $a['away_games']);
        }

        return $team_array;
    }

    function calculateTeamPoints($team, $type)
    {
        $teamPts = getTeamPoints($team);

        if($type == 'home')
        {
            $homem = $teamPts['home_games'];
            $homew = $teamPts['home_won'];
            $percent = ($homew * 100) / $homem;

            $remaining = $homem - $homew;

            $per = ($remaining * 100) / $homem;
            $percent += $per / 2;
        }
        elseif($type == 'away')
        {
            $homem = $teamPts['away_games'];
            $homew = $teamPts['away_won'];
            $percent = ($homew * 100) / $homem;

            $remaining = $homem - $homew ;

            $per = ($remaining * 100) / $homem;
            $percent += $per / 2;
        }

        return $percent;
    }

    function getpercent($hometeamid, $awayteamid)
    {
        $hometeampts = calculateTeamPoints($hometeamid, 'home');
        $awayteampts = calculateTeamPoints($awayteamid, 'away');


        $homepercent = floor(($hometeampts - $awayteampts) + 50);
        $awaypercent = 100-$homepercent;


    }

    //demo
    getpercent($hometeamid, $awayteamid);
    ?>

【问题讨论】:

  • 你在任何地方都包含这个函数文件吗?如果是,请尝试使用include_once
  • 你是否在这个脚本中包含任何 php 脚本。
  • 这通常发生在您尝试定义已定义的函数时。正如 Rikesh 所说,使用 include_once。

标签: php function


【解决方案1】:

将方法函数getTeamPoints放在IF条件中..

if(!function_exists('getTeamPoints')){ 
    function getTeamPoints()....

}

也不可能多次声明一个函数!

如果您声明它超过 1 次,则必须编写不同的名称,如果您只包含该文件超过 1 次(这是错误的..)此 IF 函数存在检查将正常工作。

【讨论】:

  • 谢谢,它成功了!
  • @GamblerHeaven - 如果上述技巧解决了您的问题,请投票。
  • 应该按照此处的建议阻止条件函数声明。它的价格很高。而是在故障排除/调试中使用function_exists 函数来找出最初导致问题的原因。见stackoverflow.com/a/15923978/2261774
  • @M8R-1jmw5r 我知道他的脚本中某处有问题,但我们猜不出它在哪里.. + 这个文件中有更多函数,如果需要多次,它们也应该抛出错误..
  • 查找方法之一是produce a backtrace when the error occurs。 99.9% 的情况下,函数重新声明错误是不同问题的标志。您的回答有效地防止了致命错误,但它没有处理其原始原因。相反,它使代码有条件,这增加了复杂性并使应用程序更容易出错。因此,由于您的鼻子已经闻到存在潜在问题的气味,请跟随您的鼻子。这将改善您的编码。
【解决方案2】:

看到函数重新声明错误表明您第二次直接或间接地包含了同一个文件。

除了错误消息本身之外,这表明您的应用程序工作流程中存在问题。

最直接的解决方案是找出函数第二次加载的时间和原因,然后修复工作流程。

您可以通过以下方式了解更多信息:

if(!function_exists('getTeamPoints')) {
    throw new Exception('Function getTeamPoints() already declared.');
}

include('getteampoints.php');

抛出异常不仅可以让您稍后捕获它(致命错误不可能),而且它还会显示回溯,以便您可以更轻松地找出文件在何处(以及为什么)被执行时间。

如果您不确定该结果,您也可以暂时否定条件并在函数第一次加载时抛出异常。

【讨论】:

    猜你喜欢
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-29
    • 2015-08-29
    • 2012-06-18
    相关资源
    最近更新 更多