一位同事添加了assert http://php.net/assert在我们的库中,在我本来会使用 if 语句并引发异常的地方执行几次命令。 (在此之前我什至从未听说过断言。)以下是他如何使用它的示例:
assert('isset($this->records); /* Records must be set before this is called. */');
我会这样做:
if (!isset($this->records)) {
throw new Exception('Records must be set before this is called');
}
来自阅读关于断言的 PHP 文档 http://php.net/assert,看起来建议您确保断言处于活动状态并在使用断言之前添加处理程序。我找不到他这样做的地方。
所以,我的问题是,考虑到上述情况,使用断言是一个好主意吗?我应该更频繁地使用它而不是 if 和异常吗?
另请注意,我们计划在各种项目和服务器上使用这些库,包括我们甚至可能不参与的项目(这些库是开源的)。这对使用断言有什么影响吗?
适用于大多数语言(我隐约知道的所有语言)的经验法则是assert
用于断言条件是always正确,而if
如果可以想象它有时会失败,那么它是适当的。
在这种情况下,我会说assert
是适当的(基于我对情况的薄弱理解),因为records
should always在调用给定方法之前设置。因此,未能设置记录将是程序中的错误,而不是运行时条件。在这里,assert
有助于确保(通过充分的测试)不存在可能导致受保护的代码的程序执行路径assert
被称为没有records
已被设置。
使用的优点assert
相对于if
就是它assert
通常可以在生产代码中关闭,从而减少开销。最适合处理的情况if
可以想象,这种情况可能会在生产系统的运行时发生,因此无法关闭它们不会造成任何损失。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)