首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异常捕获和CallHook

异常捕获和CallHook
EN

Stack Overflow用户
提问于 2014-01-31 13:58:00
回答 1查看 120关注 0票数 0

我在MVC框架中使用一个调用钩子来执行我的类和方法。不,我想用PHP异常函数添加这样的错误处理。我只是想知道哪里是执行catch命令的最佳地方。一个请求(当然)会导致多个类的执行。在整个系统中,都会出现异常。(例见下文)。

代码语言:javascript
复制
function callHook() {
    global $urlArray;
    //DEFINE CONTROLLERS
    if (strlen(strstr($urlArray[0],'popup_'))>0)
    {
        $controller = substr($urlArray[0], 6);
    }
    else
    {
        $controller = $urlArray[0]; 
    }
    $queryString[] = $urlArray[1];
    $URLaction = $urlArray[2];

    if(!isset($controller) && empty($controller)){ $controller = 'home';}
    if(!isset($URLaction) || empty($URLaction)){$action = 'view';}else{$action = $URLaction;}

    $controllerName = str_replace('-','', $controller);
    $controller = ucwords($controller);
    $model = rtrim($controller, 's');
    $controller .= 'Controller';
    $dispatch = new $controller($model,$controllerName,$action);

    if ((int)method_exists($controller, $action)) {
        $ResultArray = call_user_func_array(array($dispatch,$action),$queryString);
        return $ResultArray;
    } else {
        exit("FATAL ERROR: 101.".$controller."-".$action);
    }
}

示例类:

代码语言:javascript
复制
public function CheckCarExistance(){
    if(!is_object($this-> carId)){throw new Exception("carId is missing!");}
        $CountCars = new modelmysql();
        $CountCars->connect();
        $CountCars->count('system_cars', "carId = '".mysql_real_escape_string($this-> carId)."'");
        $this->results = $CountCars ->getResult();

}   

要显示所有异常,在调用钩子中或者仅仅在每个类/方法中放置try/catch是个好主意吗?

卡胡克

代码语言:javascript
复制
if ((int)method_exists($controller, $action)) {
        try{
            $ResultArray = call_user_func_array(array($dispatch,$action),$queryString);
            return $ResultArray;
        }
        catch(Exception $e){
          echo 'Error Found message: ' .$e->getMessage() .' <br />\n";';
        }

    } else {
        exit("FATAL ERROR: 101.".$controller."-".$action);
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-31 14:08:22

所以我会这样做

代码语言:javascript
复制
try{
    if ((int)method_exists($controller, $action)) {
        throw new Exception("FATAL ERROR: 101.".$controller."-".$action);
    }
    $ResultArray = call_user_func_array(array($dispatch,$action),$queryString);
    return $ResultArray;
} catch(Exception $e){
   exit( 'FATAL ERROR: ' .$e->getMessage() .' <br />\n"');
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21481865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档