В моем проекте PHP шаблон Observer используется везде, например:
foreach ($this->_aObserver as $observer)
{
$observer->vOnUpdate();
}
Но если один наблюдатель отключится из-за Фатальная ошибка или же Uncaught Exception, остальные наблюдатели не могу быть вызванным.
Так есть идеи, чтобы решить эту проблему?
Предполагая, что вы реализуете шаблон наблюдателя самостоятельно и, закрывая наблюдателя, вы имеете в виду, что выдается исключение, вы можете заключить вызов метода в 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
Попробуйте использовать попробовать поймать
foreach ($this->_aObserver as $observer)
{
try {
$observer->vOnUpdate();
} catch(\Exception $e) {
// log message
}
}
Вы можете проверить, существует ли метод, а затем вызвать его, если да.
foreach ($this->_aObserver as $observer)
{
try {
if (method_exists($observer, 'vOnUpdate')) {
$observer->vOnUpdate();
}
} catch(\Exception $e) {
// echo 'Caught exception: '.$e->getMessage();
}
}