аналог try catch , который может поймать exit

antson

Новичок
Партнер клуба
Хочется , чтобы можно было писать в виде
try
{
$a=func();
}
catch()
{
// при вызове func случился fatal error или exit
}

Зачем такой изврат?
func - может быть написан другим программистом(или использовать сторонние библиотеки), а мне важно завершить свой кусок кода.

Альтернативу знаю , через шаманство c register_shutdown.

Но может есть способ проще ?
 

HraKK

Мудак
Команда форума
Конечно, есть.... конечно... У вас все другие программисты такие?

Вызывайте в другом процессе, форкайте)
 
  • Like
Реакции: vld

AnrDaemon

Продвинутый новичок
Хочется , чтобы можно было писать в виде
try
{
$a=func();
}
catch()
{
// при вызове func случился fatal error или exit
}

Зачем такой изврат?
Именно что изврат.

func - может быть написан другим программистом(или использовать сторонние библиотеки), а мне важно завершить свой кусок кода.
Ну и что? Если библиотека не работает, её надо исправлять, а не продолжать пользоваться и ловить фаталы.

Альтернативу знаю , через шаманство c register_shutdown.

Но может есть способ проще ?
Куда ещё проще, чем документированные возможности языка?
 

antson

Новичок
Партнер клуба
AnrDaemon, в Codeigitor меня не устраивало поведение CI_DB_driver при $db['default']['db_debug'] = TRUE;

накрутил такого
Код:
                // нужно поймать все ошибки php
                    $callback = new UnregisterableCallback(array($this, "deliver_failure"));
                    register_shutdown_function(array($callback, "call"));
                  // DB_Driver не должен делать exit()
                    $db_debug = $this->db->db_debug;
                    $this->db->db_debug = FALSE;
                  // в вызываемой функции !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                    $responce =  call_user_func_array(array($drivers, $method), array($arg));
                // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                    // отключить обработчик
                      $callback->unregister();
                    // востановить поведение DB_Driver
                    $this->db->db_debug = $db_debug;
                  // взять справочно  
                    $last_error = error_get_last();
                    $this->paysystems_log_model->insert('debug','deliver_end','info',$last_error);
                // анализируем ответ
                if($responce===TRUE)
                {
                }
               else
                {
                }
 

Absinthe

жожо
А еще человек может while (1); написать. Как переопределить while?
 
Сверху