在php中使用try catch而不是检查权限

时间:2016-05-16 23:18:02

标签: php performance

我在Python论坛上看到了一个有趣的引用,它要求宽恕比要求许可更容易#34;。我不太熟悉这种语言所以我不能说这是不是垃圾。从使用.NET开始,我的理解是try catch是一项昂贵的操作,应该只用于例外情况。有点像安全网。

这种类型的行为有什么优点吗?在中,是否可以更快地从try catch中的文件中读取并检查在执行读取操作之前是否可以找到/读取文件。我可以看到它如何使代码更容易维护,但有什么影响。检查99.9%的时间检查毫无意义,这是一种浪费。

2 个答案:

答案 0 :(得分:1)

据我所知,这不是PHP的标准做法。这在很大程度上是因为大多数PHP内置程序都抛出了PHP 错误 - 而不是异常! - 在PHP 7.0之前。 PHP try / catch块无法捕获PHP错误,因此必须对可能失败的函数使用显式检查。

如果您的代码需要与PHP 5.6或更早版本兼容,则不能使用此约定。如果您可以为您的代码强制使用PHP 7.0或更高版本,那么可能值得尝试,但我不知道这可能会对性能产生什么影响。

答案 1 :(得分:0)

尝试捕捉本身真的很贵。即使没有使用它(即没有产生异常),仍然有一些“嵌入”生成的程序集中的开销。至于简单检查文件是否存在并且可以被访问,同样的事情发生了:两件事都是系统调用,通常更昂贵。但是,您还应该考虑对文件的读取操作也是系统调用。

现在问题缩小到更昂贵的问题:2个系统调用或1个带有异常处理的系统调用。我在这里的假设(我有点自信)是后者在实际抛出异常的情况下会更昂贵,但在其他情况下会更快。由于您已经指出在大多数情况下访问文件没有问题,因此您可能“应该”使用例外。处理错误更容易,并且使代码变得更漂亮(虽然它是有争议的)。

关于代码方面的更多内容:它完全取决于您的框架现在的样子以及您希望它看起来像什么。事实上,您可以创建一个类,以两种方式处理所有这些内容,它们看起来都很干净(如果操作正确)并且易于维护。但是,如果你不想把它保存在一个单独的类(或单独的文件\ function \ universe)中,我会去处理异常。

最后,如前所述,在您的情况下,异常处理通常会更快,但问自己一个问题:它有多少问题?您是否每次访问页面执行一次操作,还是多次执行此操作?页面是经常访问还是每天访问一次?与您拥有的所有其他页面\算法相比,这会产生多大的影响。有一个很好的概念称为90/10规则:90%的代码在10%的时间执行,反之亦然。如果这个特定代码在这90%中,你甚至不应该担心性能,因为你应该考虑其他10%的代码。 (您可以阅读有关此here

的更多信息

还有一件事:正如duskwuff所述,此处所写的内容适用于PHP版本> = 7.0