我感兴趣的是如何创建自己的函数,允许它在没有错误记录的情况下执行,但只有在使用@
运算符执行时才会执行,如@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();
左右一起运行。
提前致谢!
答案 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}).");
}