我应该总是检查PHP函数的参数吗?


Should I always check args for a function in PHP?

背景披露:我从事PHP项目已经有一段时间了,但直到最近才开始认真地查找最佳实践、面向对象设计模式、新PHP版本特性等等。

我的很多代码最终看起来像这样:

public function($arg1 = 'default', $arg2 = false)
{
   if(!empty($arg2) && $arg1 != 'default) {
     // do something here
    }
}

我在github和whatnot中看到的几乎所有正确的OOP代码都不会检查所使用的参数的存在或正确类型。

我的问题是:总是对参数进行冗余检查,还是只在可能发生坏事情的特定情况下才进行冗余检查,这被认为是一种好做法?

例如,在运行一个SQL查询并获取结果后,我总是这样做if(!empty($results)) //go do stuff

我应该这样做吗?是我多疑了吗?

对于类,您可以通过typehint更容易地检查参数

public function doSomething(My'Super'Cl $cl, array $params){
...
}

有时可以通过func_num_args

检查参数

我同意这是好做法,我的意思是,这叫做合同设计

最好预先定义函数应该做什么,并做适当的异常处理。

示例-如果我正在编写一个应用程序,它使用了我的库,那么要么应用程序应该做一些检查,要么库应该做一些检查。

我通常选择在应用程序中做适当的检查,这样我就可以正确地通知用户。这也消除了在库中进行操作的负担,使其使用起来更加灵活。

但是如果你选择这样做,你应该确保以类似的方式编写所有的库和应用程序(因此是"标准"),否则会变得混乱。

我认为github上的大多数东西都会在库方法中,因此希望你在应用程序中做一些事情。