[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Убеди,что так лучше
Страницы: 1, 2, 3
Эли4ка
Хорошо,чтобы задача была более ясной и понятней,напишу,какие функции должны быть:
1)Получаем информацию о страницы. Если ее не существует(4**),то надо завершить скрипт и выдать соответствующее уведомление,что страницы нет.
2)Если страница есть,скачиваем с нее файл.Вдруг произошла какая-то ошибка во время скачивания(инет скакнул) завершить скрипт и уведомить,что файл не был скачан.
3)Проверяем,есть ли такой файл в БД.Если есть, останавливаем скрипт и говорим,что файл уже есть.
4)Далее записываем в БД всю информацию о файле.Вдруг произошла ошибка при записи(БД упала или еще что) останавливем скрипт и уведомляем пользователя,что файл был скачан,но в БД не был записан.
И т.д.
То есть они должны выполняться последовательно как бы.
Уместно ли будет тут try {} catch,killer8080 ? sad.gif
killer8080
Цитата (Эли4ка @ 11.08.2018 - 11:13)
Хорошо,чтобы задача была более ясной и понятней,напишу,какие функции должны быть:

в таком случае вообще все просто
try {
step1();
step2();
step3();
...

stepN();
} catch (SomeException $e) {
// обрабатываем исключение, пишем в лог, выводим ссобщение пользователю и т.д.
}

Цитата (Эли4ка @ 11.08.2018 - 11:13)
Уместно ли будет тут try {} catch,killer8080 ?

естественно
Эли4ка
Так а вы все действия в одну ветку засунули.А нужно чтобы если первое не выполнилось,второе не запускалось и т.д.
тут то так не сработает.
Valick
killer8080, а в коня ли корм?


_____________
Стимулятор ~yoomoney - 41001303250491
killer8080
Цитата (Эли4ка @ 11.08.2018 - 12:00)
А нужно чтобы если первое не выполнилось,второе не запускалось и т.д.
тут то так не сработает.

чего это вдруг? Функция каждого шага имеет свою ответственность, она сама должна проверять корректность выполнения задачи. Если функция скачивания файла не сумела его скачать, она и должна кинуть исключение, последующие шаги не выполнятся, будет вызван блок catch, который и будет принимать решение что делать дальше - вывести сообщение, запланировать повторный запуск или ещё что.
Эли4ка
Тогда я не совсем вас поняла,
step1();
step2();
step3();
...

stepN();

это функции для одной проверки или все сразу для всех проверок?
Просто я бы сделала если через try-catch где каждый if.
chee
Если не углублять в то как работает код и что он делает, то второй вариант лучше. Любая IDE будет психовать от первого кода. У меня Netbeans уже от 2ой вложенности корвалол ищет, а тут какие-то лестницы

Если посмотреть детально, там нужны экспепшены

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Valick
chee, не мешало бы тему прочитать... детально.


_____________
Стимулятор ~yoomoney - 41001303250491
killer8080
Цитата (Эли4ка @ 11.08.2018 - 12:16)
это функции для одной проверки или все сразу для всех проверок?

эти функции выполняют свою работу,

function step1() {
// do some thing

if ($some_thing_wrong) {
throw new Exception('Some thing wrong');
}
}

и так далее
Эли4ка
Все,теперь поняла.
Но тогда если я хочу отдавать ответ ошибки в json формате мне нужно сделать свой обработчик ошибки что ли?

Я просто никогда не работала с try-catch huh.gif
Эли4ка
Врубилась как.
killer8080
Эли4ка
можно кидать разные типы исключений, в зависимости от вида ошибки, и по разному их обрабатывать, если нужно. Например при сетевом фейле, запланировать повторную попытку через время, при невозможности распарсить контент отправить мыло админу, возможно изменилась структура и нужно переделывать парсер и т.п. (если это крон задача)
Эли4ка
Это в выбрасываемых исключениях? Или в блоке try-catch?
killer8080
Пример на коленке
class NetworkFailException extends Exception {}

function parse() {
// добываем урл файла, если не удалось кидаем Exception
return $url;
}

function download($url) {
$content = @file_get_contents($url);

if (!$content) {
throw new NetworkFailException('Network fails');
}

return $content;
}

function save($content) {
// сохраняем контент файла, если не удалось кидаем Exception
}

function exec_sequence() {
$url = parse();
$content = download($url);
save($content);
}

$max_attempts = 10; //количество попыток скачивания
$timeout = 5; // таймаут повторных запрпосов при фейле
$i = 0;

do {
try {
exec_sequence();
} catch (NetworkFailException $e) { // сетевой сбой обрабатываем отдельно
if ($i++ < $max_attempts) { // делаем повторную попытку
sleep($timeout);
continue;
} else {
Log::add($e->getMessage()); // попытки исчерпаны пишем в лог и прерываем
break;
}
}
catch (Exception $e) { // все остальные исключения пишем в лог
Log::add($e->getMessage());
break;
}

Log::add('Success');
break;
} while (1);
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.