Php无法重新声明功能

时间:2017-07-16 14:21:59

标签: php

据我所知,该函数只声明一次。但我得到这个错误无法重新声明calcPercentages(),它告诉我它在第17行声明是正确的

包含错误功能的函数......

function auditStats($audit){

    $mysqli = dbConnect();
    $audit_id = $audit;
    $result = $mysqli->query("SELECT imageGrade, SUM(imageGrade=1) AS grade1, SUM(imageGrade=2) AS grade2, SUM(imageGrade=3) AS grade3, COUNT(*) AS total_imgs FROM image WHERE type != 'standard' and auditID ='$audit_id'")or exit("Error code ({$mysqli->errno}): {$mysqli->error}");
    $row = $result->fetch_assoc();

    $grade1 = $row['grade1'];
    $grade2 = $row['grade2'];
    $grade3 = $row['grade3'];
    $totalImgs = $row['total_imgs'];

    function calcPercentages($grade, $total){
        $percent = round(($grade / $total) * 100,2);
        return $percent;
    }
    if ($totalImgs != 0){
        $percent_1 = calcPercentages($grade1, $totalImgs);
    }
    $return_array = [
        'total'=>$totalImgs,
        'percent_1'=>$percent_1
    ];
    return $return_array;
}

除了auditStats函数之外,该函数不会被调用,并且使用

在页面下方进一步调用结果
$percent_1 = auditStats($auditID)[percent_1];

请原谅我,如果我犯了明显的新手错误,我正在从程序转到OOP,我刚刚开始使用它。

2 个答案:

答案 0 :(得分:6)

您在calcPercentages函数中声明auditStats,因此每次调用auditStats时都会重新声明。

calcPercentages移到auditStats之外。

答案 1 :(得分:2)

在PHP中,与JS不同,函数从不是另一个函数的本地函数,因此当到达行function calcPercentages...时,您将创建一个名为calcPercentages的全局函数。当它再次运行时,您正在尝试创建另一个具有相同名称的全局函数,并且您会收到错误。

将声明移到全球范围内,将其设为in a class or object或制作anonymous function