>  기사  >  백엔드 개발  >  PHP set_error_handler에서 오류 처리를 설정한 후 많은 문제가 발생합니까? ?

PHP set_error_handler에서 오류 처리를 설정한 후 많은 문제가 발생합니까? ?

WBOY
WBOY원래의
2016-10-10 11:55:571048검색

다음은 배열에 있는 변수를 전역 변수로 import하기 위해 제가 커스터마이징한 방법입니다. 그러나 주어진 배열과 동일한 키 이름을 가진 변수가 전역 변수에 이미 존재하는지 여부를 판단할 때 @가 억제되더라도 set_error_handler를 제거하지 않으면 여전히 오류가 보고됩니다. 이 문제를 해결하는 방법은 무엇입니까? ?

<code>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);


</code>

답글 내용:

다음은 배열의 변수를 전역 변수로 가져오기 위해 제가 사용자 정의한 사용자 정의 방법입니다. 그러나 주어진 배열과 동일한 키 이름을 가진 변수가 전역 변수에 이미 존재하는지 여부를 판단할 때 @가 억제되더라도 set_error_handler를 제거하지 않으면 여전히 오류가 보고됩니다. 이 문제를 해결하는 방법은 무엇입니까? ?

<code>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);


</code>

오류 핸들러는 오류를 수집하는 데 사용됩니다. 특정 오류를 처리하지 않으려면 오류 핸들러에서 해당 오류를 건너뛰면 됩니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.