It seems to me that this topic is very strange and confused. Could someone lights me up?
绝对。我不是一个PHP用户,但我可能有一个小见解在try / catch在ActionScript,Java和JavaScript。记住,不同的语言和平台鼓励try / catch的不同用法。那说…
我唯一推荐使用try / catch的时候是,如果你使用的是本地语言函数
>可以抛出一个错误/异常
>不给你任何工具来检测你是否会做一些愚蠢的,会导致错误/异常。例如:在ActionScript中,关闭未打开的加载程序将导致错误,但加载程序没有检查isOpen属性,因此您必须将其包装在try / catch中,否则将导致完全无意义的错误。
>错误/异常真的没有意义。
让我们来看看你列出的例子,看看它们与那个列表是否一致。
I read someone saying that we should use try-catch blocks only to prevent fatal errors.
在AS的loader.close()函数的情况下,这是好建议。这是一个致命的错误,所有从一个否则微不足道的错误。另一方面,AS中的几乎所有错误将使您的应用程序停止。你会把它们全部在try / catch吗?绝对不! “致命错误”是致命的原因。这意味着发生了一些严重的错误,并且应用程序继续在潜在的“未定义”状态是愚蠢的。最好知道一个错误发生,然后修复它,而不是只是让它去。
I read someone else saying that we should use it only on unexpected errors
这甚至更糟。那些是假设你不想沉默的错误,因为沉默它们意味着你永远不会找到他们。也许你不是吞下他们,虽然…也许你正在记录他们。但是为什么你会尝试/ catch / log / continue,就像没有发生什么,允许程序在潜在的危险和意想不到的情况下运行?只是让错误踢你的牙齿,然后解决它。比起试图调试某个程序中错误的东西,别人写的更容易,因为他们在try / catch块中包装了所有东西,然后忽略日志。
Others simply say that try-catch blocks should be used everywhere because they can be also extended (extending the Exception class).
这有潜在的优点,如果你是一个抛出,你试图提醒自己你的程序中的一个特殊情况…但为什么尝试/捕获自己的抛出错误?让它踢你的牙齿,然后修复它,使您不再需要抛出错误了。
Finally someone says that PHP try-catch block are totally useless because they are very bad implemented. (On this i find a nice SO question about performance).
也许是这样。我不能回答这一个。
所以…这可能是一个宗教问题,我确定人们会不同意我,但从我的特殊优势点,这些是我多年来学习的关于try / catch的经验教训。