Php 在闭包中找不到该类

Php 在闭包中找不到该类,php,class,Php,Class,这是我的ErrorHandler类,我从调用ErrorHandler::init()的主应用程序类注册处理程序 我不明白为什么,但是在set\u error\u handler和set\u exception\u handler中找不到类ErrorResponse 但是,该类可在寄存器\关闭\函数中找到。。。这太奇怪了 您知道在其他处理程序中找不到ErrorResponse类的原因是什么吗 <?php namespace tools\exception; use tools\core\

这是我的
ErrorHandler
类,我从调用
ErrorHandler::init()的主
应用程序
类注册处理程序

我不明白为什么,但是在
set\u error\u handler
set\u exception\u handler
中找不到类
ErrorResponse

但是,该类可在
寄存器\关闭\函数中找到
。。。这太奇怪了

您知道在其他处理程序中找不到
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();
                }
            }
        });
    }
}

我修复了它:D,问题是它使类找不到错误…我找到了兼容的声明。。。(当你不尊重的时候你得到的正常错误)在一些日志中


ErrorResponse是Response类的子类,它们都有一个名为
create()
的工厂方法来实例化它们。我删除了
ErrorResponse
上的工厂方法,并使用常规方法实例化它
newerrorresponse(…)

我修复了它:D,问题是它使类未找到错误…我找到了兼容的声明。。。(当你不尊重的时候你得到的正常错误)在一些日志中


ErrorResponse是Response类的子类,它们都有一个名为
create()
的工厂方法来实例化它们。我删除了
ErrorResponse
上的factory方法,并使用正常方式实例化它
newerrorresponse(…)

您尝试过使用完整的限定类名吗?我尝试过从前端控制器使用require_once(),但它没有被清除,我想使用自动加载。如果您想使用tools\core\http\ErrorResponse::create(/*…*/)->sendJSON(),我也尝试过,但没有成功:(请检查您给定的名称空间ErrorResponse::itself我认为所有这些都是正确的,因为ErrorResponse类位于register\u shutdown\u函数处理程序上……这怎么可能?这没有意义您尝试过使用完整的限定类名吗?我尝试过使用require\u once()从前端控制器,它工作了,但没有清理,我想使用自动加载。如果您想将tools\core\http\ErrorResponse::create(/*…*/)->sendJSON()放入,我也尝试过,但没有成功:(检查您给定的名称空间ErrorResponse::itself我认为所有这些都是正确的,因为ErrorResponse类位于寄存器\u shutdown\u函数处理程序上……这怎么可能?这没有意义