Je comprends ce que font les instructions try-catch, mais en lisant la documentation sur php.net, je ne serais pas en mesure de la mettre en œuvre dans mon propre code. J'ai besoin d'un exemple réel pour m'aider à comprendre.
Comment puis-je transformer cet exemple en instruction try catch si le téléchargement échoue?
$move = move_uploaded_file($_FILES['file']['tmp_name'], $_SERVER['DOCUMENT_ROOT']."/uploads/".$_FILES['file']['name']);
if (!$move) {
die ('File didn't upload');
} else {
//opens the uploaded file for extraction
echo "Upload Complete!";
}
Ce n'est peut-être pas un bon exemple, mais toute aide serait la bienvenue.
Vous pouvez le faire comme ça.
try {
//throw exception if can't move the file
if (!move_uploaded_file( ... )) {
throw new Exception('Could not move file');
}
//do some more things with the file which may also throw an exception
//...
//ok if got here
echo "Upload Complete!";
} catch (Exception $e) {
die ('File did not upload: ' . $e->getMessage());
}
C'est un peu inutile pour l'exemple ci-dessus, mais vous devriez avoir l'idée. Notez que vous pouvez lancer les exceptions de n’importe où (par exemple, dans une fonction/méthode que vous appelez depuis try {}) et elles se propagent vers le haut.
Eh bien, si vous voulez utiliser des exceptions, vous pouvez faire quelque chose comme:
function handleUpload() {
$move = move_uploaded_file($_FILES['file']['tmp_name'], $_SERVER['DOCUMENT_ROOT']."/uploads/".$_FILES['file']['name']);
if (!$move) {
throw new Exception('File Didnt Upload');
}
}
try {
handleUpload();
echo "File Uploaded Successfully";
} catch(Exception $ex) {
die($ex->getMessage);
}
Je sais que cela peut sembler énorme - mais vous pouvez appeler la méthode à partir de n'importe où dans la pile d'appels et intercepter l'exception à tout moment.
Les instructions try-catch
sont utilisées pour gérer les exceptions. Je ne crois pas que la fonction move_uploaded_files
puisse émettre une exception et une exception, en tant que telle, je pense que votre code est écrit est correct Après l'appel, vous regardez le code de retour. Si c'est faux, vous terminez le traitement, sinon vous signalez la réussite.
Selon un article similaire de PHPbug, seul le code OO (code orienté objet) lève des exceptions. Cela signifie que des fonctions telles que move_uploaded_file ne lanceront pas leurs propres exceptions, mais un autre code le fera.
Vous devez jeter un oeil sur les [Meilleures pratiques en matière d'exception dans PHP 5.3] [1].
La gestion des exceptions dans PHP n'est pas une nouvelle fonctionnalité, loin de là. Dans le lien suivant, vous verrez deux nouvelles fonctionnalités dans PHP 5.3 basées sur des exceptions. Le premier est constitué d'exceptions imbriquées et le second est un nouvel ensemble de types d'exceptions proposés par l'extension SPL (qui est maintenant une extension principale du moteur d'exécution PHP). Ces deux nouvelles fonctionnalités ont été intégrées au livre des meilleures pratiques et méritent d’être examinées en détail.
http://ralphschindler.com/2010/09/15/exception-best-practices-in-php-5-3