Перегрузка PHP-функции die () - PullRequest
1 голос
/ 02 апреля 2011

Мне нужно перегрузить функцию die ().Например, я хочу передать дополнительный параметр функции die (), которая имеет значение true и отправляет мне электронное письмо о том, что с сайтом произошло что-то ненормальное.Не могли бы вы помочь мне !!!

Спасибо всем ...

Ответы [ 6 ]

4 голосов
/ 02 апреля 2011

Привет всем ... Мне нужно перегрузить функцию die ().

Нет, нет.

Вы можете использовать set_error_handler или register_shutdown_function для запуска некоторого кода при ошибке PHP.

Я оставлю читателю в качестве упражнения ознакомление с документацией и эксперимент, чтобы выяснить, для каких сценариев отключения эти функции будут запускаться.

4 голосов
/ 02 апреля 2011

PHP не позволяет этого.Просто используйте свою собственную функцию:

<?php
function ddie($email=false){
  if ($email) doemail();
  die();
}
?>
3 голосов
/ 02 апреля 2011

Вы не можете oveload встроенную функцию, но вы можете написать оболочку:

function die_with_grace($message, $send_email=false) {
    if ($send_email) {
        // send email here
    }
    die($message);
}

mysql_query('...') or die_with_grace('Error in query', true);
2 голосов
/ 02 апреля 2011

Вы не хотите этого делать. die() не является обработчиком ошибок. Это просто выходит из сценария. То, что вы, вероятно, ищете, это

Пример:

$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
    error_log('DB troubles', 1, 'admin@example.com');
    die;
}

Альтернативой этому было бы использование trigger_error в сочетании с set_error_handler

1 голос
/ 02 апреля 2011

Хотя die() и exit() выглядят как функции, на самом деле они являются просто встроенными функциями, которые PHP называет «языковыми конструкциями».Поэтому, даже если бы существовал простой способ переопределить функции, это не сработало бы.( можно заменить функциями через сторонние расширения, но это не то, что вам действительно нужно здесь в любом случае.)

Возможно, вы захотите взглянуть на trigger_error () или используя исключения (например, throw new EmailException()).Оба из них могут быть захвачены и опционально использованы для отправки электронного письма.

0 голосов
/ 02 апреля 2011

Почему бы не создать свой собственный кубик ();функционировать?Просто создайте custom_die ();и пусть он отправит вам электронное письмо, а затем умрет ();.

Обратите внимание, что вы, скорее всего, будете получать случайные сообщения, в которых вы получите тонну электронных писем из-за простых сбоев на сервере.

...