Ich weiß, dass diese Frage vor numorous mal gefragt wurde, aber sie scheinen eine Desktop-Anwendung Hintergrund und nicht Web-Anwendung zu haben. Ich baue gerade eine Webanwendung mit PHP. Ich werde einen Controller und eine Modelldatei verwenden, um meine Frage zu demonstrieren.Die beste Praxis, wenn PHP Ausnahmebehandlung verwenden
Controller-Datei
Diese Datei auf der Datenbank Datenanrufe abzufragen und holen
<?php public function index() {
$this->database->query("SELECT user_name, FROM test WHERE user_name = :user_name");
$this->database->execute_query("jim");
$this->view->data = $this->database->fetch_query();
?>
Die Datenbankdatei
<?php
class DB {
private $datasourcename;
private $user;
private $password;
private $connection;
private $prepare;
private $query;
function __construct($dsn, $user, $password) {
$this->datasourcename = $dsn;
$this->user = $user;
$this->password = $password;
$this->connection = new PDO($this->datasourcename, $this->user, $this->password);
}
public function query($query) {
$this->query = $query;
try {
if (empty($query)) {
throw new Exception("The query is empty");
return false;
}
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "<br/>";
}
if (strstr($query, ":") == FALSE) {
return $this->connection->query($query);
} else {
$this->prepare = $this->connection->prepare($query);
}
}
public function execute_query($valarg = array()) {
try {
if (empty($valarg)) {
throw new Exception("There are no values in the execute query function");
return false;
}
if (is_array($valarg) == false) {
throw new Exception("The values inserted are not in an array");
return false;
} else {
$query = $this->query;
$paramkeys = array();
$paramArr = array();
if (strstr($query, ":")) {
preg_match_all("/:(\w+)/", $query, $paramkeys);
$paramArr = array_combine($paramkeys[0], $valarg);
$this->prepare->execute($paramArr);
}
}
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "<br/>";
}
}
public function fetch_query() {
try {
if($this->execute_query() == false) {
throw new Exception("Sorry you need to fix this first");
}
if($this->query() == false) {
throw new Exception("Sorry you need to fix this first");
}
else {
$result = $this->prepare->fetch(PDO::FETCH_ASSOC);
return $result;
}
}
catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "<br/>";
}
}
}
?>
ich in meiner Datenbank Klasse Ausnahmebehandlung als eine Möglichkeit genutzt haben Damit ein Entwickler die von dieser Klasse bereitgestellten Funktionen korrekt verwendet, damit die Anwendung funktioniert, habe ich recht, wenn ich daran denke, dass dies die beste Vorgehensweise ist, um sie zu verwenden? Gibt es eine klare Best Practice, wann und wie man sie benutzt? Ich habe ähnliche Fragen auf dieser Website gelesen, aber der Hintergrund war Desktop-Anwendungsdesign und keine Webanwendung.
Eine leere Abfrage ist in diesem Zusammenhang ** ** absolut eine Ausnahme. Es gibt keinen triftigen Grund, jemals versucht zu haben, das Nichts abzufragen, was bedeutet, dass der aufrufende Code in irgendeiner Weise gebrochen ist. Wenn man hier keine Ausnahme macht, würde das Wasser nur trüben, wenn man versucht, die Ursache des Fehlers herauszufinden. – FtDRbwLXw6
@drrcknlsn, ich habe allgemein gesprochen. Wenn die Anwendung erwartet und erfordert, dass ein Ergebnis fortgesetzt wird, dann ist eine Ausnahme durchaus sinnvoll. – Brad
Auch wenn ein Ergebnis nicht fortgesetzt werden muss, ist eine leere Abfrage ein Zeichen, dass etwas nicht stimmt. Die Rückgabe von nichts würde es dem aufrufenden Code erlauben, das Problem nicht zu bemerken, wenn es keinen Rückgabewert erwartet (z.B. sollte es eine Befehlsabfrage gewesen sein). – FtDRbwLXw6