Frage Best Practice für die Rückgabe von "Fehler" aus einer Funktion


Ich habe eine Funktion:

public function CustomerRating() {
     $result = $db->query("...");
     $row = $result->fetch_assoc();

     if($row)
          $output = $row['somefield'];
     } else {
          $output = "error";
     }

     return $output;
}

//somewhere on another page...
if(is_numeric($class->CustomerRating()) {
     echo $class->CustomerRating;
} else {
      echo "There is an error with this rating.";
}

Gibt es einen besseren Weg, Fehler zu finden? Wenn in dieser Funktion keine Zeilen zurückgegeben werden, bedeutet das an sich keinen "Fehler", sondern bedeutet einfach, dass der Wert nicht berechnet werden kann. Wenn ich nach dem Ergebnis einer Funktion suche, habe ich das Gefühl, dass es eine bessere Möglichkeit gibt, die zurückgegebenen Daten zu überprüfen, bevor ich sie in der if-Funktion anzeigen kann. Was ist der beste Weg, dies zu tun? Ich möchte ein "false" zurückgeben, aber wie würde ich das beim Aufruf der Funktion überprüfen? Vielen Dank!


15
2017-07-13 16:06


Ursprung


Antworten:


Es gibt (meiner Meinung nach) 2 gemeinsame Wege:

  1. Rückkehr  false
    Viele eingebaute PHP-Funktionen tun das

  2. Verwenden SPL-Ausnahmen
    Entwickelte PHP-Frameworks (Symfony2, ZF2, ...) tun das


8
2017-07-13 16:10



Ausnahmen verwenden Vermeiden Sie Fehler von Funktionen und Methoden zurückzugeben


3
2017-07-13 16:08



Du brauchst Ausnahmen:

public function CustomerRating() {
     $result = $db->query("...");
     $row = $result->fetch_assoc();
     if ($row !== null) {
          return $row['somefield'];
     } else {
          throw new Exception('There is an error with this rating.');
     }
}

// Somewhere on another page...
try {
    echo $class->CustomerRating();
} catch (Exception $e) {
    echo $e->getMessage();
}

2
2017-07-13 16:09



ich würde ... benutzen Ausnahmen - Spart die Verwirrung.


0
2017-07-13 16:08



Der beste Weg, um mit Fehlern umzugehen, ist eine Ausnahme auszulösen. Auf diese Weise können Sie alle möglichen verschiedenen Fehler haben und diese entsprechend behandeln.

Sie können dann einfach tun:

try {
    $myvar = CustomerRating();
    //do something with it
} catch (Exception $e) {
    echo $e->getMessage();
}

0
2017-07-13 16:08



Probieren Sie es aus:

public function CustomerRating() {
     $result = $db->query("...");
     $row = $result->fetch_assoc();

     if($row){
         $output = $row['somefield'];
     } else {
         $output = false;
     }

     return $output;
}

//somewhere on another page...
if($class->CustomerRating() !== false) {
     echo $class->CustomerRating();
} else {
     echo "There is an error with this rating.";
}

Dadurch wird sichergestellt, dass es nicht bricht, wenn Sie eine Null zurückgeben.


0
2017-07-13 16:12