I can not understand why this approach does not work

class MyClass { private $ErrorHandler = null; // Зарегистрировать обработчик ошибок public function RegisterErrorHandler($ErrorHandlerFn) { $this->ErrorHandler = $ErrorHandlerFn; } // Симуляция ошибки public function TestError(){ if($this->ErrorHandler) { // Если определен обработчик ошибок $this->ErrorHandler('Текст ошибки'); } } } $myClass = new MyClass(); $myClass->RegisterErrorHandler(function($errorText){ echo $errorText; }); $myClass->TestError(); 

While this code works perfectly

 $ErrorHandler = function($errorText){ echo $errorText; }; $ErrorHandler('Текст ошибки'); 

    1 answer 1

    In this case, php is trying to call an undefined function MyClass::ErrorHandler To bypass, you can use call_user_func

     public function TestError(){ if(is_callable($this->ErrorHandler)) { // Если определен обработчик ошибок call_user_func($this->ErrorHandler,'Текст ошибки'); } } 

    Test