Дополнительные материалы
![Аватары экспертов Хекслета](https://cdn2.hexlet.io/assets/faces/mentors-756ab67c814cd4c22715666812a66c9dac9ac2d20176a10b0e932ee851a918e0.png)
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Вам ответят команда поддержки Хекслета или другие студенты
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
Наши выпускники работают в компаниях:
Зарегистрируйтесь или войдите в свой аккаунт
Курс «PHP: ООП»
↳ Урок «Исключения»
Задание ужасное. как и большинство в этом курсе. Лекция - "ну если мы вот это поменяем, то будет вот так.." - без примеров на экране, просто слова. Очень плохо сделанный курс.
Добрый день! Над этим курсом есть пометка: Внимание! Этот курс находится в разделе "Песочница". Курсы в этом разделе сделаны пользователями Хекслета и всегда бесплатны. Администрация Хекслета не несет ответственности за эти курсы.
Сейчас в стеке PHP обновлённые курсы: https://ru.hexlet.io/professions/php#education
Курс «PHP: ООП»
↳ Урок «Исключения»
Вопрос не по заданию, но к теме имеет отношение. При попытке отправки е-мейл со странички с формой на локальном сервере, естественно возникает ошибка:
Code (possible spoiler)
mail(): Failed to connect to mailserver at localhost port 25, verify your SMTP and smtp_port setting in php.ini or use ini_set()
Пытаюсь её перехватить вот так:
Code (possible spoiler)
try { mail($to, $subject, $message, $headers)); } catch (\Exception $e) { echo $e->getMessage(); }
Однако мне упорно высвечивается в самом верху варнинг:
Code (possible spoiler)
( ! ) Warning: mail(): Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in F:\PHP\MVC\vitalyswipe-tinymvc-c9f9910\application\controllers\controller_contacts.php on line 36
Что я делаю не так?
Понятно, а жаль. Выходит их можно только отключить, но тогда будет не понятно ушло письмо или нет. Точнее даже так: на стр. формы высветится что письмо ушло, а на самом деле Failed to connect to mailserver.
Курс «PHP: ООП»
↳ Урок «Исключения»
Выполнение кода, представленного на 2-й минуте урока выдает Notice:
Code (possible spoiler)
PHP Notice: Undefined variable: folderPath in ... PHP Stack trace: PHP 1. {main}() C:\Users\mike\hexlet\index.php:0 PHP 2. tryReadFile() C:\Users\mike\hexlet\index.php:697 PHP 3. readFolder() C:\Users\mike\hexlet\index.php:689 file '$()' doesn't exist Array ( )
скорее всего, вы некорректно скопировали код
Именно так, хотя проверял раз 5... хреновщина какая-то... Спасибо.
Курс «PHP: ООП»
↳ Урок «Исключения»
Курс «PHP: ООП»
↳ Урок «Исключения»
не совсем понял принцип наследования исключений
из условия задачи
Напишите класс исключения FileException. Унаследуйте его от базового класса Exception. Напишите класс исключения FileNotFoundException и унаследуйте его от FileException.
в решении у меня родилась следующая строка
Code (possible spoiler)
throw new \Exception\FileException\FileNotFoundException ("File {$path} does not exist");
однако такое решение выдает ошибку Error: Class 'Exception\FileException\FileNotFoundException' not found
посмотрел тестовый файл, вызов происходит следующий
Code (possible spoiler)
catch (\File\Exceptions\FileNotFoundException $exception)
появился \File
появилась "s" в конце \Exceptions
отсутствует \FileException
подставив \File\Exceptions\FileNotFoundException в свое решение я получил успешное выполнение задачи
еще наблюдение, при подстановке строки из решения учителя (аргумент $filename в моей редакции $path),
Code (possible spoiler)
throw new Exceptions\FileNotFoundException("File {$path} does not exist");
несмотря на отсутствие \File - тест проходит
почему при задании наследования из условия в итоге путь выглядит несколько не логичным?
или для краткости можно сокращать путем замены всего пути на ExceptionS? но тогда почему полный путь не находит?
Спасибо. Я только что обновил упражнение.
Code (possible spoiler)
throw new \Exception\FileException\FileNotFoundException ("File {$path} does not exist");
Вы путаете наследование с неймспейсами. Это не правильная запись.
Exception
- это базовый класс исключений в php
. От него наследуются все остальные исключения. Это не тоже самое что \File\Exceptions
- это неймспейс исключений, которому должны принадлежать исключения в упражнении.
Немспейсы проставлены изначально. Вам нужно лишь описать классы исколчений и правильно указать их наследование.
Курс «PHP: ООП»
↳ Урок «Исключения»
Я так и не смог пройти первый тест.. Я даже не смог понять, что он проверяет.
Если вдруг здесь будут ребята, которым как и мне будет трудно понять - что здесь надо делать, то вот:
Классы исключений не должны содержать методов. Они пустые и просто наследуются от CliException, а он от \Exception
Отлавливать исключения в этом задании не нужно. Это все сделано в тестах.
По сути все, что нужно сделать в этом упражнении - перебрать список возможных аргументов $argsFormat
, и если в нем есть обязательные аргументы, и в $args
они не приходят - выбрасывать throw new RequiredException()
. И выбрасывать RequiredException()
, если у пришедшего аргумента должен быть параметр, а его нет.
В RequiredException() передавать ничего не надо.
P.s. если сыпется второй тест - то возможно что-то не так с логикой в парсере. Тест ждет исключений одного типа, а приходят другого.. Или не приходят вообще
Мы сегодня обновили это упражнение. Чтобы обновить его у себя нужно сбросить прогресс.
Курс «PHP: ООП»
↳ Урок «Исключения»
Помогите, пожалуйста. Не могу понять, что должны в итоге возвращать исключения и как они должны быть связаны с CliException.php
. В нем должен быть реализован класс с методом, к которому обращаются, сообщающая об ошибке?
в Parse не нужен try, задача просто выбросить нужное исключение.
Курс «PHP: ООП»
↳ Урок «Исключения»
Поправьте, пожалуйста, в README:
$args == ['--help' => null, '--include' => 'file/to/path', 'exec' => 'ls -la']
exec без --
Познал отличия между array_key_exists() и isset(), спасибо.
Поправил. Спасибо!