PHP: set_error_handler 和可见性

3
在我的类构造函数中,我有以下代码:
set_error_handler(array(
    $this,
    '_custom_error_handler'
));

在同一个类中,我定义了以下方法:
protected function _custom_error_handler($error_number, $error_string, $error_file, $error_line)

当我的代码运行时遇到错误,我会收到以下警告:

警告:无效的回调函数..._custom_error_handler,无法访问受保护的方法

为什么这个类(或它的子类?)不能访问这个受保护的方法?一个受保护的方法不应该是可访问的吗?


回调函数确实允许访问受保护的方法,但是无论在哪里 PHP 核心启动您的回调函数都不属于该类。请注意与自己调用 call_user_func() 的区别。 - Álvaro González
1
您应该了解 PHP 编码规范,特别是 PSR-2 方法命名。其中规定:方法名称不应以单个下划线作为前缀表示受保护或私有可见性。 - apokryfos
1个回答

3

受保护的方法只能从类内部或子类中访问。

在这种情况下,set_error_handler 调用了一个方法,并且 set_error_handler 是在你的类外面。因此它必须是公共的。


我觉得“set_error_handler is outside your class”这部分不是很清楚——因为它在没有错误的情况下使用了$this,所以很明显它是在类内部。我猜你指的是回调函数最终被调用的上下文。 - Álvaro González

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接