Php 为Phil Sturgeon'中的set_error_处理程序创建回调;静态控制器
我在CodeIgniter中使用Phil Sturgeon的REST_控制器,但我想以一种像我这样的老Java程序员更熟悉的方式使用try…catch块。所以,我给Phil的控制器添加了一个函数:Php 为Phil Sturgeon'中的set_error_处理程序创建回调;静态控制器,php,codeigniter,Php,Codeigniter,我在CodeIgniter中使用Phil Sturgeon的REST_控制器,但我想以一种像我这样的老Java程序员更熟悉的方式使用try…catch块。所以,我给Phil的控制器添加了一个函数: function exception_error_handler($errno, $errstr, $errfile, $errline, $errcontext){ $ee = new ErrorException($errstr, 0, $errno, $errfile,
function exception_error_handler($errno, $errstr, $errfile, $errline, $errcontext){
$ee = new ErrorException($errstr, 0, $errno, $errfile, $errline, $previous);
throw $ee;
}
然后在控制器的\u构造方法中,我尝试将该函数与错误处理连接起来:
set_error_handler("exception_error_handler");
当我现在运行扩展REST_控制器的控制器时,会收到以下错误消息:
set\u error\u handler()期望参数(异常\u error\u handler)为
是一个有效的回调
如果我将函数和调用集\u error\u处理程序放在子类中,则不会出现错误,并且无论何时出现错误,我的try…catch块都会捕获异常。为什么我的回调在超类中无效?您的子类继承了父类的构造函数
set_error_handler(数组($this,'exception_error_handler'))代码>
编辑
设置后:
function exception_error_handler($errno, $errstr, $errfile, $errline, $errcontext){
$ee = new ErrorException($errstr, 0, $errno, $errfile, $errline, $previous);
throw $ee;
}
致:
您可以按如下方式调用它:
__construct(){
set_error_handler(function(){self::exception_error_handler("exception_error_handler")});
}
您的子类正在继承父类的构造函数
set_error_handler(数组($this,'exception_error_handler'))代码>
编辑
设置后:
function exception_error_handler($errno, $errstr, $errfile, $errline, $errcontext){
$ee = new ErrorException($errstr, 0, $errno, $errfile, $errline, $previous);
throw $ee;
}
致:
您可以按如下方式调用它:
__construct(){
set_error_handler(function(){self::exception_error_handler("exception_error_handler")});
}
我很感谢用户3345621为我指明了正确的方向。我向下滚动了PHP手册条目,找到了一条关于设置回调函数的3种方法的好建议
在REST\u Controller中,我添加了异常\u错误\u处理程序
函数,正如我在原始问题中所提到的,只是按照用户3345621的建议将其设置为静态
protected static function exception_error_handler($errno,
$errstr,
$errfile,
$errline,
$errcontext){
$ee = new ErrorException($errstr, 0, $errno, $errfile, $errline, $previous);
throw $ee;
}
然后我注意到REST\u控制器中的early\u checks
方法。我添加了以下调用,以在early\u checks
方法中设置\u error\u处理程序:
set_error_handler(array(&$this, 'exception_error_handler'));
PHP手册中的注释说,符号很重要
现在,当子类中发生错误时,会根据我的要求引发ErrorException。我很感谢用户3345621为我指明了正确的方向。我向下滚动了PHP手册条目,找到了一条关于设置回调函数的3种方法的好建议
在REST\u Controller中,我添加了异常\u错误\u处理程序
函数,正如我在原始问题中所提到的,只是按照用户3345621的建议将其设置为静态
protected static function exception_error_handler($errno,
$errstr,
$errfile,
$errline,
$errcontext){
$ee = new ErrorException($errstr, 0, $errno, $errfile, $errline, $previous);
throw $ee;
}
然后我注意到REST\u控制器中的early\u checks
方法。我添加了以下调用,以在early\u checks
方法中设置\u error\u处理程序:
set_error_handler(array(&$this, 'exception_error_handler'));
PHP手册中的注释说,符号很重要
现在,当子类中发生错误时,会按照我的要求引发ErrorException。当我将该行放入父类的构造函数中时,只会导致500个内部服务器错误。你是说我应该把它放在子构造函数中?我想在一个地方设置它,然后所有子类都可以访问相同的功能。Hmmm。好奇者和好奇者。当我把这一行放进孩子的构造器时,一切都正常。我读过令人难以置信的令人困惑的PHP文档。你是怎么从他们那里弄出来的?我仍然希望能够在父级中更全局地设置错误处理程序,但是.hmmm,请尝试:“set_error_handler(function(){self::customErrorHandler();}”)-并将其放入父级constructorsorry还想添加,您应该在父级一侧将“customErrorHandler()”函数设置为静态。抱歉,未经编辑就复制了一些旧代码。以下是我想发布的内容。试试:“set_error_handler(function(){self::exception_error_handler(“exception_error_handler”)})”当我将该行放入父级的构造函数时,它只会导致500个内部服务器错误。你是说我应该把它放在子构造函数中?我想在一个地方设置它,然后所有子类都可以访问相同的功能。Hmmm。好奇者和好奇者。当我把这一行放进孩子的构造器时,一切都正常。我读过令人难以置信的令人困惑的PHP文档。你是怎么从他们那里弄出来的?我仍然希望能够在父级中更全局地设置错误处理程序,但是.hmmm,请尝试:“set_error_handler(function(){self::customErrorHandler();}”)-并将其放入父级constructorsorry还想添加,您应该在父级一侧将“customErrorHandler()”函数设置为静态。抱歉,未经编辑就复制了一些旧代码。以下是我想发布的内容。Try:“set_error_handler(function(){self::exception_error_handler(“exception_error_handler”)};”