шаблон наблюдателя — ошибки / исключения PHP в цикле предотвращают дальнейшие итерации

В моем проекте PHP шаблон Observer используется везде, например:

foreach ($this->_aObserver as $observer)
{
$observer->vOnUpdate();
}

Но если один наблюдатель отключится из-за Фатальная ошибка или же Uncaught Exception, остальные наблюдатели не могу быть вызванным.

Так есть идеи, чтобы решить эту проблему?

-2

Решение

Предполагая, что вы реализуете шаблон наблюдателя самостоятельно и, закрывая наблюдателя, вы имеете в виду, что выдается исключение, вы можете заключить вызов метода в try...catch, Увидеть http://php.net/manual/en/language.exceptions.php

foreach ($this->_aObserver as $observer)
{
try {
$observer->vOnUpdate();
} catch (\Exception $exception) {
// do something with the error or just move on?
}
}

Для перехвата фатальной ошибки вам нужно создать функцию для перехвата фатальной ошибки и в основном игнорировать ее. Что это не рекомендуется, фатальные ошибки не должны быть исправлены. Увидеть: http://php.net/manual/en/function.register-shutdown-function.php

1

Другие решения

Попробуйте использовать попробовать поймать

foreach ($this->_aObserver as $observer)
{
try {
$observer->vOnUpdate();
} catch(\Exception $e) {
//  log message
}

}
0

Вы можете проверить, существует ли метод, а затем вызвать его, если да.

foreach ($this->_aObserver as $observer)
{
try {
if (method_exists($observer, 'vOnUpdate')) {
$observer->vOnUpdate();
}
} catch(\Exception $e) {
// echo 'Caught exception: '.$e->getMessage();
}
}
0
По вопросам рекламы [email protected]