Старый вопрос, но тот, который у меня был в прошлом при переходе от VBA, распространяется на php, где вы можете использовать «GoTo» для повторного входа в цикл «При ошибке» с «Возобновить», и он ушел все еще обработка функции.
В php после небольшого пробного периода я теперь использую вложенный try {} catch {} для критических и некритических процессов или даже для вызовов взаимозависимых классов, чтобы можно было проследить путь к началу ошибки.
например если функция b зависит от функции a, но функция c хороша, но не должна останавливать процесс, и я все же хочу узнать результаты всех 3 независимо от этого, вот что я делаю:
//set up array to capture output of all 3 functions
$resultArr = array(array(), array(), array());
// Loop through the primary array and run the functions
foreach($x as $key => $val)
{
try
{
$resultArr[$key][0][] = a($key);
$resultArr[$key][1][] = b($val);
try
{ // If successful, output of c() is captured
$resultArr[$key][2][] = c($key, $val);
}
catch(Exception $ex)
{ // If an error, capture why c() failed
$resultArr[$key][2][] = $ex->getMessage();
}
}
catch(Exception $ex)
{ // If critical functions a() or b() fail, we catch the reason why
$criticalError = $ex->getMessage();
}
}
Теперь я могу просмотреть свой массив результатов для каждого ключа и оценить результаты.
Если есть критический сбой для a () или b ().
У меня все еще есть справка о том, как далеко он продвинулся до того, как произошел критический сбой в $ resultArr, и если обработчик исключений установлен правильно, я знаю, был ли это a () или b (), который потерпел неудачу.
Если c () не работает, цикл продолжает работать. Если c () не удался в различных точках, с небольшой дополнительной логикой пост-цикла, я даже могу узнать, сработал ли c () или имел ошибку на каждой итерации, опросив $ resultArr [$ key] [2].