是否可以将私有静态方法用作set_error_hander回调?
这很好:
<?php
class DisplayErrors{
private static $email_address = 'myemail@mail.com';
public static function error_handler($number, $message, $file, $line, $vars) {
// send error to email;
}
private static function toEmail(){
// set_error_handler('self::error_handler');
set_error_handler(__CLASS__ .'::error_handler');
}
}
这既没有效果也没有错误:
<?php
class DisplayErrors{
private static $email_address = 'myemail@mail.com';
private static function error_handler($number, $message, $file, $line, $vars) {
// changed to private static method;
}
private static function toEmail(){
// set_error_handler('self::error_handler');
set_error_handler('self::error_handler');
}
}
我也尝试过:
set_error_handler(array('self','error_handler'));
// no effect no error
set_error_handler('&self::error_handler');
// invalid callback
答案 0 :(得分:1)
如果您使用的是PHP 7.1或更高版本,则新的closure::fromCallable方法将允许您执行此操作。
private static function toEmail(){
set_error_handler(Closure::fromCallable('static::error_handler'));
}
Closure::fromCallable()
在调用范围内评估可调用参数,因此在类中使用时可以接受私有和受保护的方法。