J'ai une fonction PHP dans un fichier Drupal 6 .module. J'essaie d'exécuter des validations de variable initiales avant d'exécuter des tâches plus intensives (telles que des requêtes de base de données). En C #, j'avais l'habitude d'implémenter des instructions IF au début de mon bloc Try qui lançait de nouvelles exceptions en cas d'échec de la validation. L'exception levée serait interceptée dans le bloc Catch. Voici mon code PHP:
function _modulename_getData($field, $table) {
try {
if (empty($field)) {
throw new Exception("The field is undefined.");
}
// rest of code here...
}
catch (Exception $e) {
throw $e->getMessage();
}
}
Cependant, lorsque j'essaie d'exécuter le code, cela me dit que les objets ne peuvent être lancés que dans le bloc Catch.
Merci d'avance!
function _modulename_getData($field, $table) {
try {
if (empty($field)) {
throw new Exception("The field is undefined.");
}
// rest of code here...
}
catch (Exception $e) {
/*
Here you can either echo the exception message like:
echo $e->getMessage();
Or you can throw the Exception Object $e like:
throw $e;
*/
}
}
À renvoyer faire
throw $e;
pas le message.
Supprimez simplement la throw
du bloc catch - changez-la en une echo
ou gérez sinon l'erreur.
Cela ne vous dit pas que les objets ne peuvent être lancés que dans le bloc catch, mais plutôt que seuls les objets peuvent être projetés et que l'emplacement de l'erreur est dans le bloc catch - il y a une différence.
Dans le bloc d'arrêt, vous essayez de lancer quelque chose que vous venez de prendre - ce qui dans ce contexte n'a pas beaucoup de sens - et ce que vous essayez de lancer est une ficelle.
Une analogie concrète avec ce que vous faites est d’attraper une balle, puis d’essayer de lancer le logo du fabricant ailleurs. Vous pouvez uniquement lancer un objet entier, pas une propriété de l'objet.
throw $e->getMessage();
Vous essayez de jeter une string
En résumé, les exceptions consistent généralement à définir des états exceptionnels de l'application et non des messages d'erreur après validation. Ce n'est pas une exception, lorsqu'un utilisateur vous donne des données non valides
Throw nécessite un objet instancié par \Exception
. Seul le $e
attrapé peut jouer le tour.
throw $e