错误抑制运算符
PHP 中的错误抑制运算符确实是一个非常危险的工具。只需在语句前加上 at 符号 @
,就可以抑制由此产生的任何错误,包括停止脚本执行的致命错误。
遗憾的是,在 PHP 中还不一定会废弃这种方法;在与 PHP 内部人员交谈后发现,由于某些 PHP 函数没有配套的错误函数来产生 PHP 脚本执行过程中的错误,因此需要先做大量的前提工作。因此,要显示不一定会停止脚本执行的非致命错误,唯一的办法就是捕获在该函数运行过程中抛出的错误。
不幸的是,PHP 内核本身就包含了大量的技术债务。不幸的是,一个优秀的 PHP 开发人员应该善于发现 PHP 内核本身的技术缺陷。事实上,Facebook 试图绕过这个问题,自己重写了 PHP 内核,并将其称为 Hak;至于你是否应该考虑采用它,我将留给你自己决定。
在使用 Go(谷歌编写的一种系统语言)开发过程中,我非常喜欢的一个特性是,你可以使用多种返回类型(例如,你可以从一个函数中返回两个值)。这样做的另一个好处是,你可以在一个函数调用中简单地返回任何错误信息,而不需要一个返回错误信息的辅助函数。
我喜欢 Go 的另一个原因是,所有警告都会被当作错误处理。你赋值了一个变量,但没有使用它?程序将无法运行(除非你将变量赋值给下划线 _
,这是一个空赋值操作符,意味着变量不会被存储在任何地方)。把警告当作错误处理的结果是,当开发人员遇到错误时,他们就知道这是严重的错误。
因此,是的,PHP 可以从 Go 等语言中学到很多东西,但从根本上说,PHP 内核显然还有很多工作要做,除此之外,PHP 社区可能还需要转变文化,变得更加开放,减少政治色彩。PHP RFC: 采用行为准则 建议 PHP 采用《实践准则》。不用说,如果以某种形式采用,PHP 社区将从中受益。
回到我们手头的问题,除非绝对必要,否则应避免使用错误抑制操作符,以便使开发人员的调试工作变得更加容易。