2017-07-16 73 views
1

。但我得到這個錯誤不能重新聲明calcPercentages(),它告訴我,這是宣佈這是正確的只要我能告訴函數只聲明一次,Php就不能重新聲明函數

包含錯誤的函數的函數線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和我剛開始使用它。

回答

6

您在auditStats函數中聲明calcPercentages,因此每次調用auditStats時都會重新聲明。

移動calcPercentages以外的auditStats

+1

謝謝,另學了一課:) – tatty27

2

在PHP中,與JS不同,函數從來不是另一個函數的本地函數,所以當到達function calcPercentages...行時,就會創建一個名爲calcPercentages的全局函數。當它再次運行時,您正在嘗試創建另一個具有相同名稱的全局函數,並且出現錯誤。

將聲明移到全局範圍外,將其放置到in a class or object或製作anonymous function

+0

謝謝,一些有用的信息:) – tatty27