如何查看调用的函数是否源自PHP die()

时间:2015-01-21 10:10:08

标签: php

我有一个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()

1 个答案:

答案 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);
    }
}