2017-06-20 22 views
2

在我的類的構造函數,我有以下幾點:PHP:的set_error_han dler和visibily

set_error_handler(array(
    $this, 
    '_custom_error_handler' 
)); 

在同一個班級,我已經定義了以下方法:

protected function _custom_error_handler($error_number, $error_string, $error_file, $error_line) 

當東西在我的代碼運行進入錯誤,我收到以下警告:

警告:回調無效... _cu stom_error_handler,不能訪問受保護的方法

爲什麼這個類(或其子?)無法訪問這個受保護的方法?不應該保護方法是否可以訪問?

+0

回調確實允許訪問受保護的方法,但PHP核心啓動回調的地方不屬於類。請注意與自己調用'call_user_func()'的區別。 –

+1

您應該閱讀PHP編碼標準,特別是[PSR-2方法名稱](http://www.php-fig.org/psr/psr-2/#methods)。它說:*方法名稱不應該以一個下劃線作爲前綴來指示受保護或私有的可見性。* – apokryfos

回答

3

受保護的方法只能從類或子類中訪問。

在這種情況下,set_error_handler正在調用一個方法,並且set_error_handler是以外的您的類。因此它必須是公開的。

+0

我沒有發現「set_error_handler在你的類之外」部分非常清楚 - 因爲它使用了'$ this'而沒有錯誤清楚它在課堂內。我認爲你的意思是最終調用回調函數的上下文。 –