我有一个php函数create_error($error_string, $priority = false, $display_error = "")
$error_string
=错误讯息。
$priority
=如果该功能只应在所有其他消息之上显示此消息。 create_error
使用全局变量将所有先前的错误消息存储在数组中。如果$priority === true
那么它只会在数组中包含新消息,则会使用array_push
添加新消息。
$display_error
=控制以突出显示错误消息。
function create_error($error_string, $priority = false, $display_error = "")
{
global $json_responder;
if ($priority === true) {
$json_responder = array(array("typeof" => "message", "message" => translate($error_string)));
} else {
if (count($json_responder) >= 1) {
array_push($json_responder, array("typeof" => "message", "message" => translate($error_string)));
} else {
$json_responder = array(array("typeof" => "message", "message" => translate($error_string)));
}
}
// my ideal if died statement would be here.
// like
// if(is_from_die() === true){
// echo json_encode($json_responder);}
}
我有以下代码:
$sql_code = "select username, password, login_allowed from user where current = 1 and username = '$username' and password = '$password' ";
$qrs = mysqli_query($sql,$sql_code) or die(create_error('E500.2 - internal server error.'));
if(mysqli_num_rows($qrs) >= 2 || mysqli_num_rows($qrs) === 0) die(create_error('Incorrect username / password combination.'));
因此,当此代码运行die(create_error('Incorrect username / password combination.'));
时,它不会显示该消息,因为它永远不会到达函数的末尾。
如何在我的create_error
函数中确定它是否是从PHP中的die
构造调用的?
我已尝试debug_print_backtrace();
返回
Array
(
[0] => Array
(
[file] => C:\Web\dev\core\request_initializer.php
[line] => 83
[function] => create_error
[args] => Array
(
[0] => Incorrect username / password combination.
)
)
[1] => Array
(
[file] => C:\Web\dev\core\request_initializer.php
[line] => 29
[function] => request_login
[args] => Array
(
)
)
)
是否有可能检测到来自die()
构造的天气?
我在这里有很多选项,因为应用程序仍处于核心开发阶段,但我理想的选择是PHP自动"自动"检测die()
或exit()
答案 0 :(得分:1)
我真的建议你使用Exception,并且实现自定义异常而不是调用exit()
或die()
内置函数...
否则,现在,实现工作的唯一方法是更改您的代码:
$qrs = mysqli_query($sql,$sql_code) or create_error('E500.2 - internal server error.', FALSE, "", TRUE);
function create_error($error_string, $priority = false, $display_error = "", $withExit = FALSE) {
// do your stuf...
// ...
if($withExit === TRUE) {
exit (0);
}
}