你应该验证PHP函数中的参数类型吗?

时间:2011-09-20 00:38:00

标签: php parameters arguments

我习惯于在编写函数时检查参数的类型。是否有理由支持或反对?例如,将字符串验证保留在此代码中或删除它是否是一种好习惯,为什么?

function rmstr($string, $remove) {
    if (is_string($string) && is_string($remove)) {
        return str_replace($remove, '', $string);
    }
    return '';
}

rmstr('some text', 'text');

有时您可能会期望不同的参数类型并为它们运行不同的代码,在这种情况下验证是必不可少的,但我的问题是我们是否应该明确检查类型并避免错误。

5 个答案:

答案 0 :(得分:6)

是的,没关系。但是,php的开头并不是强类型的,所以我认为这在实践中并不是很有用。

此外,如果使用除字符串以外的对象,则例外情况会提供更多信息;因此,我会尽量避免在结尾处返回一个空字符串,因为它没有在语义上解释调用rmstr(array,object)返回一个空字符串。

答案 1 :(得分:5)

我的意见是,如果您接受用户的意见,则应执行此类验证。如果这些字符串未被用户接受或者是用户的消毒输入,那么进行验证就会过度。

答案 2 :(得分:2)

对于我来说,键入检查实际数据,从最高级别的抽象中获取用户,但在此之后,当您调用大多数函数时,您现在应该已经应用了它们的类型,并且不要在每个方法中检查它。它会影响性能和可读性。

注意:您可以通过phpDoc

添加信息,允许哪些类型的函数参数

答案 3 :(得分:1)

似乎当地人都把这个问题理解为“你应该验证参数”,它应该是“你应该验证参数类型”吗,并从中得出无意义的答案和评论。

就个人而言,我从不检查操作数类型,也从未遇到任何麻烦。

答案 4 :(得分:0)

这取决于您生成的代码。如果它实际上是生产代码,您应该确保您的功能在任何情况下都能正常工作。这包括检查参数是否包含您期望的数据。否则抛出一个异常或者有另一种形式的错误处理(你的例子完全没有了)。

如果它不是用于生产使用而你不需要防御性编码,你可以忽略任何东西并遵循垃圾垃圾原则(或三个糟糕的原则:代码狗屎,处理狗屎,得到狗屎)

最后,所有关于匹配期望:如果您不需要您的功能正常工作,您不需要正确编码。如果您实际上依赖于代码来精确工作,您甚至需要验证每个单元(函数,类)的输入数据。