php set_error_handler 設定錯誤處理後出現好多問題? ?

WBOY
發布: 2016-10-10 11:55:57
原創
994 人瀏覽過

下面是我自訂的 將陣列裡面的變數匯入到全域變數中的方法。 可是在判斷 全域變數中是否已存在 和 給定數組的鍵名一致的變數時 老是報錯,即使 加了 @ 抑制還是會報錯,除非 把 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>
登入後複製
登入後複製

error handler就是用來蒐集錯誤的,如果你想不處理某些錯誤,在error handler中略過即可,而不是應該通過錯誤級別來控制。

相關標籤:
php
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!