php set_error_handler 设置错误处理后出现好多问题??
程序员文章站
2022-04-09 13:28:12
...
下面是我自定义的一个 将数组里面的变量导入到全局变量中的方法。 可是在判断 全局变量中是否已存在 和 给定数组的键名一致的变量时 老是报错,即使 加了 @ 抑制还是会报错,除非 把 set_error_handler 给去掉才不会报错,这个怎么解决??
ini_set('display_errors' , 'On');
error_reporting(E_ALL);
// 设置错误处理函数后, ini_set() && error_reporting() 这两个函数会失效,这是怎么回事(次要)??
set_error_handler('test');
function test($err_level , $err_msg , $err_file , $err_line , $err_ctx){
echo '发生错误了!';
echo "\r\n";
echo "\r\n";
}
function extract_global(array $arr = array()){
if (empty($arr)) {
return ;
}
foreach ($arr as $key => $val)
{
// 这个地方怎么都抑制不了错误提示!
// 如果把 set_error_handler 这个去掉,就可以抑制错误
// 怎么解决这个问题(主要)??
if (!is_null(@$GLOBALS[$key])) {
trigger_error('已存在全局变量: ' . $key . '!' , E_USER_ERROR);
exit;
}
$GLOBALS[$key] = $val;
}
}
$arr = array(
'name' => 'programmer' ,
'hobby' => 'play computer game'
);
extract_global($arr);
print_r($name);
print_r("\r\n");
print_r($hobby);
回复内容:
下面是我自定义的一个 将数组里面的变量导入到全局变量中的方法。 可是在判断 全局变量中是否已存在 和 给定数组的键名一致的变量时 老是报错,即使 加了 @ 抑制还是会报错,除非 把 set_error_handler 给去掉才不会报错,这个怎么解决??
ini_set('display_errors' , 'On');
error_reporting(E_ALL);
// 设置错误处理函数后, ini_set() && error_reporting() 这两个函数会失效,这是怎么回事(次要)??
set_error_handler('test');
function test($err_level , $err_msg , $err_file , $err_line , $err_ctx){
echo '发生错误了!';
echo "\r\n";
echo "\r\n";
}
function extract_global(array $arr = array()){
if (empty($arr)) {
return ;
}
foreach ($arr as $key => $val)
{
// 这个地方怎么都抑制不了错误提示!
// 如果把 set_error_handler 这个去掉,就可以抑制错误
// 怎么解决这个问题(主要)??
if (!is_null(@$GLOBALS[$key])) {
trigger_error('已存在全局变量: ' . $key . '!' , E_USER_ERROR);
exit;
}
$GLOBALS[$key] = $val;
}
}
$arr = array(
'name' => 'programmer' ,
'hobby' => 'play computer game'
);
extract_global($arr);
print_r($name);
print_r("\r\n");
print_r($hobby);
error handler就是用来搜集错误的,如果你想不处理某些错误,在error handler中略过即可,而不是应该通过错误级别来控制。