允许使用@进行错误抑制的功能

时间:2011-04-05 16:03:50

标签: php function error-handling

我感兴趣的是如何创建自己的函数,允许它在没有错误记录的情况下执行,但只有在使用@运算符执行时才会执行,如@function();

功能:

public function query($sql, $id = false){
    $this->query_id = mysqli_query($this->connection, $sql);
    if(!$this->query_id){
        // I want to suppress this error call here...
        psyo::error("Error while executing query (sql: {$sql}).");
        return NULL;
    }else{
        $this->result = mysqli_store_result($this->connection);
        $this->affected = mysqli_affected_rows($this->connection);
        return $id ? $this->query_id : $this;
    }
}

P.S。我正在使用自己的错误处理类,并且它不会与error_log();左右一起运行。

提前致谢!

3 个答案:

答案 0 :(得分:5)

我认为知道是否有办法确定@ -operator是否用于调用函数,但您可以使用error_reporting()来测试当前级别,使用@ -operator时为0。

function test()
{   
    var_dump(error_reporting());
}

test();
@test();

答案 1 :(得分:2)

如果我理解你,你想要一种方法来抑制你自己的课堂错误。一种方法是在类showErrors中创建一个布尔变量,然后在psyo::error函数中检查该变量。如果showErrors为真,则显示它们,否则不显示它们,而是记录它们(或根据需要处理它们)。

如果你的意思是你想要@来抑制传递给错误函数的类错误,那么我认为你的错误函数需要“触发错误”。有关详细信息,请参阅trigger_error

答案 2 :(得分:2)

@运算符只是以下内容的简写:

$oldReportingLevel = error_reporting();
error_reporting(0);
 // execute @'d code here
error_reporting($oldReportingLevel);

换句话说,@暂时将错误报告级别设置为0.虽然您无法检查当前错误报告级别是否由@运算符引起,但您< em>可以检查当前的错误报告级别,如果级别为0,则绕过自己的错误处理。

你可能想要的是:

if (error_reporting() != 0) {
 psyo::error("Error while executing query (sql: {$sql}).");
}