在 php 中使用断言进行类型检查?

use*_*841 5 php oop assertions

我使用异常抛出函数对 php 中的类中的参数进行了一些检查。我有一些函数可以进行基本检查(===in_array)并在 false 时抛出异常。所以我可以assertNumeric($argument, "\\$argument is not numeric.");代替

\n\n
if ( ! is_numeric($argument) ) {\n    throw new Exception("\\$argument is not numeric.");\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

节省一些打字时间

\n\n

我在php 手册页关于assert() 的评论中读到

\n\n
\n

正如维基百科所述 - “断言主要是一种开发工具,当程序向公众发布时,它们通常会被禁用。” \n“断言应该用于记录\n逻辑上不可能的情况,并\n发现编程错误\xe2\x80\x94如果\n\'不可能\'发生,那么\n根本上的事情显然是错误的。这是\n\n与错误处理不同:大多数\n 错误情况都是可能的,\n 尽管有些在实践中极不可能\n 发生。使用\n 断言作为通用错误\n 处理机制通常是不明智的:\n 断言不允许从错误中正常恢复,并且断言失败通常会突然停止程序的执行。断言也不会显示用户友好的错误消息。”

\n\n

这意味着“gk at proliberty dot com”给出的强制启用断言的建议,即使已手动禁用断言,也违背了仅将它们用作开发的最佳实践工具

\n
\n\n

那么,我是不是“做错了”?还有哪些其他/更好的方法可以做到这一点?

\n

mar*_*pin 1

就我个人而言,我会支持维基百科内容,而不是使用断言进行常规类型检查。

相反,我会使用 PHP Type-Hinting(目前正在处理 php 5.1 的对象和 php 5.2 的数组......不会帮助您处理基本数据类型,但它仍然比没有好);然后,您可以使用您暗示的函数,甚至可以更进一步,考虑 Ilia Alshanetsky 的通用类型提示补丁。看这里