Можно ли исключить исключение и продолжить выполнение script?
Php: исключение catch и продолжить выполнение, возможно ли это?
Ответ 1
Конечно, просто поймайте исключение, где вы хотите продолжить выполнение...
  try
  {
      SomeOperation();
  }
  catch (SomeException $e)
  {
      // do nothing... php will ignore and continue    
  }
Конечно, проблема состоит в том, чтобы тихо отбросить то, что может быть очень важной ошибкой. SomeOperation() может терпеть неудачу, вызывая другие тонкие, трудные проблемы с определением, но вы никогда не узнаете, если вы отключите исключение.
Ответ 2
Да, но это зависит от того, что вы хотите выполнить:
например.
try {
   a();
   b();
}
catch(Exception $e){
}
c();
 c() всегда будет выполняться. Но если a() выдает исключение, b() выполняется  не.
Поместите материал в блок try, который зависит друг от друга. Например. b зависит от некоторого результата a, нет смысла ставить b после блока try-catch.
Ответ 3
Конечно:
try {
   throw new Exception('Something bad');
} catch (Exception $e) {
    // Do nothing
}
Вам может потребоваться прочитать документацию PHP на Exceptions.
Ответ 4
Да.
try {
    Somecode();
catch (Exception $e) {
    // handle or ignore exception here. 
}
однако обратите внимание, что php также имеет коды ошибок, отдельно от исключений, унаследованное удержание до того, как php имел примитивные примитивы. Большинство встроенных библиотек по-прежнему вызывают коды ошибок, а не исключения. Чтобы игнорировать код ошибки, вызовите функцию с префиксом @:
@myfunction();
		Ответ 5
Другой угол на этом возвращает Исключение, НЕ выбрасывающее его, из кода обработки.
Мне нужно было сделать это с помощью шаблона, который я пишу. Если пользователь пытается получить доступ к свойству, которое не существует в данных, я возвращаю ошибку из глубины функции обработки, а не бросаю ее.
Затем, в вызывающем коде, я могу решить, нужно ли это вернуть возвращенную ошибку, заставив try() catch() или просто продолжить:
// process the template
    try
    {
        // this function will pass back a value, or a TemplateExecption if invalid
            $result = $this->process($value);
        // if the result is an error, choose what to do with it
            if($result instanceof TemplateExecption)
            {
                if(DEBUGGING == TRUE)
                {
                    throw($result); // throw the original error
                }
                else
                {
                    $result = NULL; // ignore the error
                }
            }
    }
// catch TemplateExceptions
    catch(TemplateException $e)
    {
        // handle template exceptions
    }
// catch normal PHP Exceptions
    catch(Exception $e)
    {
        // handle normal exceptions
    }
// if we get here, $result was valid, or ignored
    return $result;
В результате я все еще получаю контекст исходной ошибки, даже если она была выбрана вверху.
Другой вариант может состоять в том, чтобы вернуть пользовательский объект NullObject или UnknownProperty и сравнить его с тем, прежде чем принимать решение об отключении catch(), но так как вы можете повторно перебрасывать ошибки в любом случае, и если вы полностью контролируете общий структуры, я думаю, что это аккуратный путь вокруг проблемы неспособности продолжить попытки/уловы.
Ответ 6
Старый вопрос, но тот, который я имел в прошлом, когда отходил от VBA-скриптов к php, где вы могли бы нам "GoTo" повторно ввести цикл "On Error" с "Resume" и прочь он по-прежнему оставался обработка функции. 
В 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();
    }
} 
Теперь я могу пропустить свой массив результатов для каждого ключа и оценить результаты.
Если есть критический сбой для() или b(). 
У меня все еще есть точка отсчета о том, как далеко он достиг, прежде чем критический сбой произошел в $resultArr, и если обработчик исключений установлен правильно, я знаю, что это было() или b(), что не удалось. 
Если c() терпит неудачу, цикл продолжается. Если c() не удался в разных точках, с небольшим количеством дополнительной логики цикла сообщений, я даже могу узнать, работала ли c() или имела ошибку на каждой итерации путем опроса $resultArr [$ key] [2].