PHP类型Callable - 是可能的发送参数

时间:2014-02-03 15:37:36

标签: php oop

我有错误课,我用这种方式:

set_error_handler("Error::catchError");

我需要发送到这个类和方法信息,在哪里放置日志文件,但我无法弄清楚,如果可以通过此调用发送一些参数。我不想要,我不能直接在方法catchError中定义文件的方式。

非常感谢所有人的想法。

这是我的错误类:

class Error{    

    /** Catch PHP error and choose what to do with it
     * @param int error type
     * @param string error message
     * @param err_file string filename that the error was raised in
     * @param err_line int line number the error was raised at 
     * @param err_context array every variable that existed in the scope the error was triggered in  * 
     */
    public static function catchError($err_no, $err_str, $err_file, $err_line, $err_context){
        $log_file = "C:/wamp/www/cms/error.log"; // THIS MUST BE OBTAINED BY PARAMETER
        $date =  date("[Y-m-d h:i:s]",time());
        $client_ip = "[".$_SERVER['REMOTE_ADDR']."]";
        $text = " Error n: $err_no: $err_str on line $err_line in $err_file\n";
        file_put_contents($log_file, $date.$client_ip." ".$text, FILE_APPEND);
    }

}

1 个答案:

答案 0 :(得分:2)

使用匿名函数:

set_error_handler(function ($err_no, $err_str, $err_file, $err_line, $err_context) {
    Error::catchError('error.log', $err_no, $err_str, $err_file, $err_line, $err_context);
});

或者重写你的Error类,这样你就可以实例化它并将日志传递给构造函数(无论如何都是更好的方法):

$logger = new Error('error.log');
set_error_handler(array($logger, 'catchError'));