2017-07-16 1 views
1

nicht neu deklarieren, soweit ich sagen kann, wird die Funktion nur einmal deklariert. aber ich habe diesen Fehler nicht calcPercentages neu deklarieren kann(), und es sagt mir, es wurde auf der Linie 17, die erklärtPHP kann die Funktion

korrekt ist

die Funktion, die die fehlerhafte Funktion enthält ...

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; 
} 

Die Funktion ist nicht in der überall außer in der auditStats Funktion und die Ergebnisse werden als weiter unten auf der Seite mit

$percent_1 = auditStats($auditID)[percent_1]; 

Bitte entschuldigen sie mich angerufen, wenn ich auf der Hand Neuling Fehler gemacht habe, aus verfahren zu OOP bewege ich mich und bin einfach damit anfangen .

Antwort

6

Sie deklarieren calcPercentages innerhalb der auditStats Funktion, so dass es jedes Mal neu deklariert wird, wenn Sie auditStats aufrufen.

Verschieben calcPercentages außerhalb von auditStats.

+1

danke, eine andere Lektion gelernt :) – tatty27

2

In PHP, im Gegensatz zu JS, ist eine Funktion niemals lokal für eine andere Funktion. Wenn Sie also die Zeile function calcPercentages... erreichen, erstellen Sie eine globale Funktion namens calcPercentages. Wenn es erneut ausgeführt wird, versuchen Sie, eine andere globale Funktion mit demselben Namen zu erstellen, und Sie erhalten den Fehler.

Entweder die Deklaration global nach außen verschieben, in a class or object eingeben oder anonymous function eingeben.

+0

danke, ein paar nützliche Informationen :) – tatty27

Verwandte Themen