Попытался разобраться в исключениях, вроде всё понятно, но в тоже время и не понятно. Пример: PHP: <?php function test($val){ if (!empty($val)) { if (is_string($val)) { $strlen = strlen($val); if ($strlen == 10) { return $val; }elseif($strlen > 10){ return false; }else{ return false; } }elseif (is_array($val)) { return false; }elseif (is_numeric($val)) { return false; }else{ return false; } }else{ return false; } } ?> Мысль: На каждом "false" имею свою причину возникновения того или иного false и если мне нужно определить по какой же причине я на выходе получаю false, могу прописать echo с описанием причины, но если это готовый скрипт, было бы глупо показывать возникшие ошибки пользователю, хотя бы по той причине, что не всегда та или иная ошибка может зависеть от пользователя. Так вот ведь можно возле каждого такого "false" написать к примеру: PHP: function log($text){ file_put_contents("log.dat", $text."\n"); } Вставлять эту функцию в местах возникновения false и передавать туда текст проблемы, либо совместить эти 2 идеи: PHP: function log($text, $status = 0){ if ($status == 0) { file_put_contents("log.dat", $text."\n"); }else{ echo $text; } } В одном режиме указывать $status = 1 и выводить текст, либо писать в примитивный файл лога. Вот тут как раз вопрос: - Почему так, как написано выше делать не нужно? - Как правильно вести файл-лог ошибок. Спасибо!
Причём здесь этот код и исключения? https://secure.php.net/manual/ru/language.exceptions.php --- Добавлено --- А так, как вариант, при разных ошибках возвращать разные коды ошибок.
Это лишь пример, который демонстрирует возможность возникновения множественных исключений или такого априори быть не может? В книгах тоже показывают примеры, которые просты до безумия и далеки от реальных рабочих кодов. Исключения или исключительные ситуации это ведь не только возникшая проблема "Деление на ноль запрещено", но и какие-то рабочие моменты, касающиеся индивидуального разрабатываемого кода, которые в последующем могут породить ту или иную ошибку. Ведь перед каждым false можно прописать что-то типа PHP: throw new Exception('ПРИЧИНА'); и всё обернуть в try и catch. --- Добавлено --- может вот так будет понятнее: PHP: <?php header('Content-Type: text/html; charset=UTF-8'); function test($val){ try{ if (!empty($val)) { if (is_string($val)) { $strlen = strlen($val); if ($strlen == 10) { return $val; }elseif($strlen > 10){ throw new Exception('Больше 10'); return false; }else{ throw new Exception('Не равно 10'); return false; } }elseif (is_array($val)) { throw new Exception('Массив.'); return false; }elseif (is_numeric($val)) { throw new Exception('Число'); return false; }else{ throw new Exception('Не определенная ошибка'); return false; } }else{ throw new Exception('EMPTY'); return false; } }catch (Exception $e) { echo 'Выброшено исключение: ', $e->getMessage(), "\n"; } } echo test('zaqwertyui'); echo test(10); echo test('wertyui'); echo test([1,2,3]); ?> --- Добавлено --- В чем существенное отличие между PHP: throw new Exception('тут текст'); и тем, если я буду перед каждым return false выводить текст через echo ?
Ты можешь бросать исключения разных типов и при поимке разную реакцию давать: PHP: try { функция(); } catch (Трындец1 $e) { /* Обработать трындец 1 */ } catch (Трындец2 $e) { /* Обработать трындец 2 */ } catch (\Exception $e) { /* Обработать остальные трындецы, которые не перечислены выше */ } + исключения раскручивают назад стек вызовов, пока не найдётся обработчик, поэтому можно ставить обработчик хоть на 100 уровней вызова выше