2017-08-14 60 views
1

我想設置一個自定義的錯誤處理,但得到以下錯誤爲什麼這不是一個有效的回調

Warning: set_error_handler() expects the argument (error::handler) to be a valid callback

這是我打電話的set_error_handler功能

require_once('autoloader.php'); 
set_error_handler(array(error::class, "handler")); 

class error { 

    static public $allErrors; 
    static private $err; 

    public static function handler($errno, $errstr, $errfile, $errline, $errcontext) { 
     global $errors; 
     if ($errors == 1 || ($errors == 2 && $errno == E_WARNING)) { 
      if ($errno == E_ERROR || substr($errstr, 0, 6) == 'mysqli') { 
       ?> 
       <div class='errorbox' style='background: #990000;padding: 10px; color: #FFF; font-size: 10px;'><strong><?= $errstr ?></strong><br/><br/> 
       FILE: <?= $errfile ?> <br/> 
       LINE: <?= $errline ?> <br/><? 
       ?> 
       <pre>INFO: <?= print_r($errcontext, true) ?></pre></div><br/><? 
      } else { 
       ?><br/><font color='blue'><strong><?= $errstr ?></strong><br/> 
        FILE: <?= $errfile ?> <br/> 
        LINE: <?= $errline ?> <br/></font><br/><? 
      } 
     } 
    } 
} 

的錯誤類在另一個文件中,我沒有複製到整個類中。我一直在閱讀各地的網絡,我似乎正確地調用該方法,所以我不清楚爲什麼我收到一個警告 - 任何人都可以解釋,並告訴我如何解決

+0

你確定它應該是_static_方法嗎? –

+0

什麼版本的PHP? – axiac

+0

此代碼的工作就php5.6.19但我不得不刪除您的處理函數裏面的HTML,你有內部 – MacBooc

回答

1

我猜你正在使用PHP 7.推出了一個名爲Error的新類。

因爲此類已經存在,你的自定義類error是不會自動加載。恆定error::class解析爲標準Error類的名稱,但這一個沒有定義任何handler方法,因此,該錯誤消息。

爲你的錯誤處理類使用不同的名稱或把它變成一個namespace

+0

錯誤你剛纔downvote我的回答只有將它複製爲自己的? – Narf

+0

我從你的回答中複製了什麼? – axiac

+1

我倒了你的答案,因爲它是錯的。致命錯誤未被觸發。如果它被觸發,腳本將停止並且問題中報告的警告不會發生。 – axiac