Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为Phil Sturgeon'中的set_error_处理程序创建回调;静态控制器_Php_Codeigniter - Fatal编程技术网

Php 为Phil Sturgeon'中的set_error_处理程序创建回调;静态控制器

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,

我在CodeIgniter中使用Phil Sturgeon的REST_控制器,但我想以一种像我这样的老Java程序员更熟悉的方式使用try…catch块。所以,我给Phil的控制器添加了一个函数:

    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_han‌​dler")});
}

您的子类正在继承父类的构造函数

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_han‌​dler")});
}

我很感谢用户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”)};”