在php5中使用try-catch语句时需要考虑哪些性能影响?我以前在网上阅读过一些关于这个主题的旧信息,而且似乎相互矛盾。我目前必须使用的许多框架都是在php4上创建的,并且缺乏php5的许多细节。所以,我自己在使用php的try-catchs方面没有太多经验。 最佳答案 需要考虑的一点是,没有抛出异常的tryblock的成本与实际抛出和捕获异常的成本是不同的问题。如果仅在失败情况下抛出异常,您几乎可以肯定不会关心性能,因为每次执行程序都不会失败很多次。如果你在一个紧密的循环中失败了(也就是把你的头撞到砖墙上),你的应用程序可能会
我们都使用DB::transaction()进行多次插入查询。在这样做时,应该将try...catch放在其中还是包装它?如果出现问题,事务会自动失败,是否还需要包含try...catch?示例try...catch包装事务://try...catchtry{//Transaction$exception=DB::transaction(function(){//DoyourSQLhere});if(is_null($exception)){returntrue;}else{thrownewException;}}catch(Exception$e){returnfalse;}相反,一
好的,这可能是一个非常菜鸟的问题,但我发现关于这方面的PHP文档和几个Internet搜索并没有给我任何想法。WhenshouldIusetry-catchblockstoimprovemyapplication?我读到有人说我们应该只使用try-catchblock来防止fatalerror。我读到其他人说我们应该只在意外错误上使用它(等待什么?意外?如果它们是意外错误,我怎么能用try-catch来防止它们?我应该把我所有的应用程序代码放在一个tryblock中吗?)。其他人只是说try-catchblock应该在任何地方使用,因为它们也可以扩展(扩展Exception类)。最后有
我一直在我的PHP代码中使用try..catchblock,但我不确定我是否正确使用了它们。例如,我的一些代码如下所示:try{$tableAresults=$dbHandler->doSomethingWithTableA();$tableBresults=$dbHandler->doSomethingElseWithTableB();}catch(Exception$e){return$e;}所以我将多个数据库操作分组在同一个try/catchblock中,因为如果任何事务中发生任何异常,我将能够处理它。我这样做是因为我认为它比:try{$tableAresults=$dbHand
我一直在开发一个Android应用程序,它经常使用try/catch来防止它在不需要的地方崩溃。例如,xmllayout中带有id=toolbar的View的引用如下://seenewexamplebelow,thisoneisjustconfusing//itseemslikeIamaskingaboutemptytry/catchtry{Viewview=findViewById(R.id.toolbar);}catch(Exceptione){}此方法在整个应用程序中使用。堆栈跟踪没有打印出来,很难找到问题所在。应用突然关闭,没有打印任何堆栈跟踪。我让我的学长向我解释,他说,Th
我看到了一些这样的代码:try{db.store(mydata);}finally{db.cleanup();}我认为try应该有一个catch?为什么这段代码会这样? 最佳答案 如果您希望当前执行的方法仍然抛出异常,同时允许适本地清理资源,这很有用。下面是一个处理调用方法异常的具体示例。publicvoidyourOtherMethod(){try{yourMethod();}catch(YourExceptionex){//handleexception}}publicvoidyourMethod()throwsYourExce
我正在审查一些新代码。该程序只有一个try和一个finallyblock。由于排除了catchblock,如果tryblock遇到异常或任何可抛出的东西,它是如何工作的?是直接进入finallyblock吗? 最佳答案 如果tryblock中的任何代码可以抛出已检查异常,则它必须出现在方法签名的throws子句中。如果抛出未经检查的异常,它就会从方法中冒出来。finallyblock总是被执行,无论是否抛出异常。 关于JavaTryCatchfinally没有Catch的block,我们
有很多material出there这表明打印异常的堆栈跟踪是不好的做法。例如。来自Checkstyle中的RegexpSingleline检查:Thischeckcanbeused[...]tofindcommonbadpracticesuchascallingex.printStacktrace()但是,我正在努力寻找任何可以提供正当理由的地方,因为堆栈跟踪对于跟踪导致异常的原因肯定非常有用。我所知道的事情:堆栈跟踪永远不应对最终用户可见(出于用户体验和安全目的)生成堆栈跟踪是一个相对昂贵的过程(尽管在大多数“特殊”情况下不太可能成为问题)许多日志框架会为您打印堆栈跟踪(我们的没有,
在C#和Java(可能还有其他语言)中,在“try”block中声明的变量不在相应的“catch”或“finally”block的范围内。例如,以下代码无法编译:try{Strings="test";//(morecode...)}catch{Console.Out.WriteLine(s);//Javafans:think"System.out.println"hereinstead}在此代码中,catchblock中对s的引用会发生编译时错误,因为s仅在tryblock的范围内。(在Java中,编译错误是“scannotberesolved”;在C#中,是“Thename's'do
假设我有一个类和一个方法classA{voidfoo()throwsException(){...}}现在我想为A的每个实例调用foo,这些实例由如下流传递:voidbar()throwsException{Streamas=...as.forEach(a->a.foo());}问题:如何正确处理异常?该代码无法在我的机器上编译,因为我不处理foo()可能引发的异常。bar的throwsException在这里似乎没什么用。这是为什么呢? 最佳答案 您需要将您的方法调用包装到另一个不抛出检查异常的方法调用中。你仍然可以抛出任何Run