好吧,这可能是一个非常noob的问题,但我发现PHP文档和几个Internet搜索没有给我任何想法.
我什么时候应该使用try-catch块来改善我的应用程序?
我读过有人说我们应该只使用try-catch块来防止致命错误.我读到其他人说我们应该只在意外错误上使用它(等待什么?意外?如果它们是意外错误我怎么能用try-catch阻止它们?我应该把所有应用程序代码放在try块中吗?).其他人只是说try-catch块应该在任何地方使用,因为它们也可以扩展(扩展Exception类).最后有人说PHP try-catch块完全没用,因为它们实现得非常糟糕.(在此我发现了一个关于性能的好问题).
在我看来,这个话题非常奇怪和困惑.有人会点亮我吗?
scr*_*pse 36
在我看来,这个话题非常奇怪和困惑.有人会点亮我吗?
当然.我不是PHP用户,但在使用ActionScript,Java和JavaScript中的try/catch之后,我可能会有一些洞察力.但请记住,不同的语言和平台鼓励try/catch的不同用途.那说......
我建议使用try/catch的唯一一次是你使用的是母语功能
让我们看一下你列出的例子,看看它们与该列表的平方.
我读过有人说我们应该只使用try-catch块来防止致命错误.
在AS的loader.close()函数的情况下,这是一个很好的建议.这是一个致命的错误,而且都来自于一个微不足道的失误.另一方面,AS中的几乎所有错误都会使您的应用程序停止运行.你会把它们全部包装在try/catch中吗?绝对不!一个"致命的错误"是致命的原因.这意味着发生了一些非常错误的事情,并且应用程序继续处于潜在的"未定义"状态是蛮干的.最好知道发生了错误,然后修复它而不是放手.
我读了别人说我们应该只在意外错误上使用它
那更糟糕的是.这些都是你不想沉默的错误,因为沉默它们意味着你永远不会找到它们.也许你不会吞下它们,但是......也许你正在记录它们.但是为什么你会尝试/捕获/记录/继续,好像什么也没发生,允许程序在潜在的危险和意外情况下运行?只是让错误踢你的牙齿,然后修复它.比试图调试其他人编写的程序中的错误更令人沮丧,因为它们将所有内容都包装在try/catch块中,然后忽略了日志.
其他人只是说try-catch块应该在任何地方使用,因为它们也可以扩展(扩展Exception类).
如果你是那个正在投掷的人,那么你有潜在的优点,并且你试图提醒自己你的程序中的特殊情况......但为什么要尝试/抓住你自己抛出的错误?让它踢你的牙齿,然后修复它,这样你就不需要再抛出错误了.
最后有人说PHP try-catch块完全没用,因为它们实现得非常糟糕.(在此我找到一个关于性能的好问题).
可能是吧.我不能回答这个问题.
所以...这可能是一个宗教问题,我确信人们会不同意我,但从我的特殊观点来看,这些是我多年来在尝试/捕获方面所吸取的教训.
Win*_*ert 11
不同的人会告诉你不同的事情.但这就是我的想法,特别是在Web应用程序的情况下.
您的整个页面应该在try/catch中,向用户显示错误消息.错误消息不应该告诉用户详细发生了什么,因为这是一个安全问题.它应该将有关错误的信息记录到日志文件中.
另一种情况是在正常的事务运作中出现问题.PHP并不是很高兴,所以这可能不会发生太多.基本上,如果遇到失败时抛出异常的函数,则可以捕获异常并在该情况下执行其他操作.
一般来说,你的问题就是问你如何使用锤子来提高房屋的资格.使用例外来帮助您实现特定的行为.不要寻找使用例外的地方.
我认为这只是一个偏好问题,但根据我的经验,我鼓励你尽可能地使用它们.
在应用程序中,我们目前正在开发(使用Zend Framework,如果它很重要),我们使用一个try..catch块来捕获整个应用程序中的所有异常,这些异常向用户显示,例如,错误500和异常记录更多信息到数据库.我个人喜欢这种方法,因为异常是可扩展的,你可以基本上编写你需要的任何功能.