Класс не найден из закрытия

Это мое ErrorHandler класс, я регистрирую обработчики из основного Application вызов класса ErrorHandler::init();

Я не понимаю почему, но класс ErrorResponse не найден в set_error_handler а также set_exception_handler,

Однако класс находится в register_shutdown_function... это довольно странно.

Не могли бы вы знать, что может быть причиной того, что ErrorResponse класс не найден в других обработчиках?

<?php

namespace tools\exception;

use tools\core\http\ErrorResponse;

class ErrorHandler
{
    static public function init()
    {
        self::_registerNormalErrorHandler();
        self::_registerExceptionErrorHandler();
        self::_registerFatalErrorHandler();
    }

    static private function _registerNormalErrorHandler()
    {
        set_error_handler(function ($err_code, $err_message, $err_file, $err_line)
        {
                $responseCode = 500;
                ErrorResponse::create(
                    $responseCode,
                    $err_file,
                    $err_message,
                    $err_line,
                    "set_error_handler")->sendJSON();

                die();
        });
    }
    static private function _registerExceptionErrorHandler()
    {
        set_exception_handler(function ($exception)
        {
                $responseCode = $exception->getCode();
                if(0 === $responseCode)
                    $responseCode = 500;

                ErrorResponse::create(
                    $responseCode,
                    $exception->getFile(),
                    $exception->getMessage(),
                    $exception->getLine(),
                    "set_exception_handler")->sendJSON();

                die();
        });
    }
    static private function _registerFatalErrorHandler()
    {
        register_shutdown_function(function ()
        {
            $last_error = error_get_last();
            if( null !== $last_error ) {

                $isError = false;
                switch ($last_error["type"]) {
                    // ...
                }
                if($isError) {
                    ErrorResponse::create(
                        500,
                        $last_error['file'],
                        $last_error['message'],
                        $last_error['line'],
                        $caught)->sendJSON();
                }
            }
        });
    }
}

1 ответ

Я исправил это:D, проблема заключалась в том, что принцип подстановки Лискова приводил к тому, что класс не обнаружил ошибку... Я нашел объявление совместимости... (обычная ошибка, которую вы получаете, когда не соблюдаете принцип подстановки Лискова) в какой-то журнал.

ErrorResponse является дочерним по отношению к классу Response, и у обоих был фабричный метод с именем create() создать их экземпляр. Я удалил фабричный метод на ErrorResponse и я создаю его экземпляр обычным способом new ErrorResponse( ... )

Другие вопросы по тегам