2013-03-04 41 views
0

我想防止PHP在发生错误或加载失败的情况下(例如从远程服务器)引发错误。最近我开始使用try-catch块来避免致命错误,所以用户不知道有什么事情搞砸了。处理异常并继续工作,没有错误

看我的代码:

try 
{ 
    $flashRAW = file_get_contents($getXml); 
    $flashXML = simplexml_load_string($flashRAW); 
} 
catch(Exception $e) 
{ 
    return $e->getMessage(); 
} 

$xmlString = $flashXML->asXML(); 

使用 “回报” 是我发明的(我想,我从来没有见过那个...)。随着返回,我的应用程序将继续工作,我不会有“试图获得非对象属性”错误。没有回报,我会得到它 - 我认为这是愚蠢的,因为我使用try-catch来防止这种...

正在使用返回这种方式行吗?更好的方式来处理异常,并使该应用程序将继续工作,而没有致命的错误?我读过的地方是try-catch旨在处理逻辑错误并增加内存消耗。

+0

之前,我看到人们在使用前在catch块的回报,所以它不是一个新的发明。但是你可以做什么(并且应该这样做)是将它记录在某个文件中,以便管理员可以查看你获得的问题(包括尽可能多的信息,userid,日期/时间,url等),而不是返回,处理出现问题:显示错误消息,告诉他们联系管理员或重试。 – Husman 2013-03-04 10:45:19

+0

你认为我可以在生产环境中做到这一点吗?我想我不应该。记录当然好,但显示错误给用户恕我直言不是。 – 2013-03-04 10:48:44

+1

我想你误会了。显示错误是可以的,只要它很好的错误信息(即“对不起你找的文件找不到”或“抱歉登录失败,再试一次”)而不是神秘的PHP错误信息,它们不应该显示为结束用户。 – Husman 2013-03-04 10:54:00

回答

1

我认为你得到的问题是因为'$ flashRAW'没有被定义,如果有例外。

您应该在调用'$ flashXML-> asXML()'前检查'$ flashRAW'。

如果您使用return,则函数/页面中不会执行任何代码,具体取决于您拥有代码的位置。

使用返回与否的选择更多基于用例。所以取决于你如何使用它。

+0

我明白了。但这仅仅是一个例子。我假设我应该总是检查是否有这样的情况下的对象。回报不好? – 2013-03-04 10:37:22