【发布时间】:2011-04-02 17:57:50
【问题描述】:
我需要重载 die() 函数。例如,我想将一个额外的参数传递给 die() 函数,当它设置为 true 时,它会向我发送一封电子邮件,告诉我网站发生了异常情况。 你能帮帮我吗!!!
谢谢大家...
【问题讨论】:
标签: php overloading
我需要重载 die() 函数。例如,我想将一个额外的参数传递给 die() 函数,当它设置为 true 时,它会向我发送一封电子邮件,告诉我网站发生了异常情况。 你能帮帮我吗!!!
谢谢大家...
【问题讨论】:
标签: php overloading
大家好...我需要重载 die() 函数。
不,你没有。
您可以使用set_error_handler 或register_shutdown_function 针对 PHP 错误运行一些代码。
我将把它作为练习留给读者检查文档和实验,看看这些函数将被触发的关闭场景。
【讨论】:
register_shutdown_function 上的第一条评论完全相同。 (再次重申,我并不是说这是最好的方法!)
PHP 不允许这样做。只需使用您自己的功能:
<?php
function ddie($email=false){
if ($email) doemail();
die();
}
?>
【讨论】:
你不能超载内置函数,但你可以写一个包装器:
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);
【讨论】:
你不想那样做。 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结合使用
【讨论】:
尽管die() 和exit() 看起来像函数,但它们实际上只是PHP 称之为“语言结构”的内置特性。因此,即使有一种简单的方法来覆盖函数,它也行不通。 (是可以通过第三方扩展替换函数,但这不是你真正想要的。)
您可能想查看trigger_error() 或使用异常(例如throw new EmailException())。这两个都可以被捕获并选择性地用于发送电子邮件。
【讨论】:
为什么不创建自己的自定义 die();功能?只需创建 custom_die();并让它给你发一封电子邮件,然后 die();.
请注意,由于简单的服务器故障,您可能会偶尔收到大量电子邮件。
【讨论】: