2016-05-17 71 views
0

set_error_handler功能在PHP調用用戶調用一個可調用作爲第一個函數參數。我寫了一個類,在調用這個其他函數之前必須完成一些指令。我寫這樣的:調用調用使用可選參數

$errorCollector = new ErrorCollector(); 
set_error_handler(
    call_user_func_array(
     array($errorCollector, 'collect'), 
     array(function($error) { 
      //some instructions with $error 
     })) 
); 

$errorCollectorcollect()函數獲取調用,這需要一個非可選參數,它是一個函數。

collect()函數具有其他4個參數,$errno$errstr$errfile,和$errline。這些參數在set_error_handler函數中填寫錯誤信息。當調用與在set_error_handler功能這些參數可調用的,你不需要填寫這些

類與功能如下:

class ErrorCollector 
{ 
    private $errors; 

    public function collect(callable $handleError, $errno, $errstr, $errfile, $errline) 
    { 
     $error = array(
      'number' => $errno, 
      'string' => $errstr, 
      'file' => $errfile, 
      'line' => $errline, 
     ); 
     $this->errors[] = $error; 
     call_user_func($handleError, $error); 
    } 
} 

當我跑我的一段代碼,我得到以下錯誤:

Warning: Missing argument 2 for ErrorCollector::collect() in C:\ErrorCollector.php on line 13

Warning: Missing argument 3 for ErrorCollector::collect() in C:\ErrorCollector.php on line 13

Warning: Missing argument 4 for ErrorCollector::collect() in C:\ErrorCollector.php on line 13

Warning: Missing argument 5 for ErrorCollector::collect() in C:\ErrorCollector.php on line 13

(縮短了文件的URL爲更好的閱讀)

而參數是可選的第爲什麼我得到這個錯誤e set_error_handler功能?我可以使用可選參數調用可調用嗎?

+0

'ErrorCollector :: collect'有5個必需的參數。但是你只傳遞一個 - 'array(function($ error){//一些指令帶有$ error}))' – maximkou

+0

@maximkou是的,但是我怎麼讓其他4個可選?因爲這些在'set_error_handler'函數中是可選的。 – Bas

+0

爲參數設置默認值。就像這樣:'公共功能集(可調用$的HandleError,$錯誤號= NULL,$ errstr = NULL,$ ERRFILE = NULL,$ errline = NULL)' – maximkou

回答

0

您錯誤地定義了錯誤處理程序。定義像這樣:

set_error_handler(
    array($errorCollector, 'collect'), 
); 
+0

我不認爲這會工作,它只會拋出一個錯誤,你沒有給'set_error_handler'函數提供正確的參數。 – Bas