php类型检查方法参数 - 值得吗?

Nor*_*sly 9 php parameters typechecking

我想知道你认为最好的做法是什么 - 它是否非常适合在PHP中输入检查参数?也就是说,你实际上看到你已经实现了参数类型检查的项目与那些没有实现参数类型检查的项目中的错误明显减少了吗?我在考虑这样的事情:

public function __construct($screenName, $createdAt) {  
        if (!is_string($screenName) || !is_string($createdAt) {
            return FALSE;
        }
}
Run Code Online (Sandbox Code Playgroud)

hak*_*kre 9

通常在使用skalar变量"types"的PHP应用程序中,实际上是字符串输入(HTTP请求).PHP使这更容易,所以将字符串输入转换为数字,以便您可以使用它进行计算等.

但是,检查is_string示例中建议的标量值没有多大意义.因为标量族中几乎任何类型的变量都是字符串,或者至少可以用作字符串.至于你的类示例,问题是,检查变量类型是否真的有意义?

对于你提出的代码没有任何意义,因为你用一个退出构造函数return false;.这将结束构造函数以运行并返回未正确初始化的对象.

相反,您应该抛出异常,例如,InvalidArgumentException如果构造函数参数未提供预期/需要的值类型.

抛开这一点并理所当然地认为你的对象构造函数需要在字符串和整数或bool或任何其他标量类型之间有所不同,那么你应该进行检查.

如果您不依赖于精确的标量类型,则可以转换为字符串.

只需确保隐藏在对象中的数据总是完全正确,并且错误的数据不可能进入私有成员.


cwa*_*ole 6

这取决于.我通常会使用内置于PHP中的类型提示来处理更高级别的对象((stdClass $ obj,array $ arr,MyClass $ mine)),但是当涉及较低级别的值时 - 特别是数字和字符串,它变得有点不太有益.

例如,如果您有字符串'12345',那么区分它和数字会变得有点困难12345.

对于其他一切,将数组意外地转换为字符串将是显而易见的.转换为字符串的类实例(如果它们没有)__toString会使PHP大喊大叫.因此,您唯一真正的问题是具有__toString方法的类,并且确实限制了它可以出现的次数.我真的很想知道是否值得这样的开销.