Я понимаю, что делают утверждения try-catch, но, читая документацию на php.net, я не смог бы реализовать ее в своем собственном коде. Мне нужен реальный пример, чтобы помочь мне понять.
Как включить этот пример в инструкцию try catch, если загрузка не была успешной?
$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!"; }
Это не может быть хорошим примером для работы, но любая помощь будет оценена по достоинству.
Вы могли бы сделать это так.
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()); }
Это немного бессмысленно для приведенного выше примера, но вы должны получить эту идею. Обратите внимание, что вы можете выбросить исключение из любого места (например, внутри функции / метода, вызываемой с помощью try {}), и они будут распространяться вверх.
Ну, если вы хотите использовать исключения, вы можете сделать что-то вроде:
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); }
Я знаю, что это может показаться раздутым – но вы можете вызвать метод из любой точки стека вызовов и поймать исключение в любой момент.
операторы try-catch
используются для обработки исключений. Я не верю, что функция move_uploaded_files
может выбрасывать и move_uploaded_files
, поэтому я считаю, что код написан правильно. После вызова вы просматриваете код возврата. Если это неверно, вы завершаете обработку, иначе вы достигнете успеха в отчете.
Согласно аналогичной записи в PHPbug, только код OO (Object-Oriented code) генерирует исключения. Это означало бы, что такие функции, как move_uploaded_file, не будут генерировать собственные исключения, но какой-то другой код будет.
Я нашел это полезным.
Здесь приведен хороший пример применения обработки исключений и try catch.
Вы должны взглянуть на [Except Best Practices в PHP 5.3] [1]
Обработка исключений в PHP не является новой функцией на любом участке. В следующей ссылке вы увидите две новые функции в PHP 5.3, основанные на исключениях. Первый – вложенные исключения, а второй – новый набор типов исключений, предлагаемых расширением SPL (который теперь является основным расширением среды выполнения PHP). Обе эти новые функции нашли свой путь в книге лучших лучших практик и заслуживают подробного изучения.
http://ralphschindler.com/2010/09/15/exception-best-practices-in-php-5-3