在 php 构造函数中实现 try/catch 块

Implementing a try/catch block in php constructor function

我有一个带有 try-catch 块的查询。我要创建对象,如果它失败,它将抛出错误消息或在其他页面上说重定向。

代码

function __construct() {
        try{ 
            $this->ServiceObj = AnyClass::getService('XXX');
          }
        catch{
            return Redirect::to('/');
        }
    } 

public function MyOwnFunction() {

    $getValueofCode = $this->_ServiceObj->set($endPoint_Url); //it's only example method not want to set anything
 }

这是在构造函数中定义和使用 try catch 块的正确方法吗?我可以在构造中使用 try & catch 块吗?如果 NO 有没有更好的方法来实现这个目标?

提前致谢!!!

您绝对可以在构造函数中使用 try catch,只是不要忘记像 catch (\Exception $e) 一样指定要捕获的异常 class。但是 Laravel 不会处理 returned 重定向。 (根据定义构造函数甚至不应该 return 东西)

一个简单的解决方法是在重定向时调用 send()。这将 return 立即发送给客户端并停止应用程序。

try{ 
    $this->ServiceObj = AnyClass::getService('XXX');
}
catch(\Exception $e){
    Redirect::to('/')->send();
}

但是既然您提到了登录页面,您最好使用 before filter 来检查和重定向。就像内置的 auth 过滤器一样。

第三个解决方案是 App::error。在 app/start/global.php 你可以这样做:

App::error(function(FooBarException $exception)
{
    return Redirect::to('/');
});

当然,这只有在您的异常足够具体时才有效(将 FooBarException 替换为您想要捕获的异常)