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函数处理程序上……这怎么可能?这没有意义