null
在使用PHPDoc 描述变量时,我对何时使用 as 类型感到困惑。类型提示是否应该描述外部调用者预期和遵守的希望和期望,或者它们是否应该记录变量的所有可能类型,即使希望它在实践中是一种非常具体的类型?
示例 1:默认值。以下函数只需要非空值。但是,如果没有传递任何值,它默认null
并显式检查该值,以确定是否传递了任何值,并为这种情况返回一个特殊值。希望没有外部调用者会传递除整数之外的任何内容。应该null
在@param
下面的类型中使用,还是应该只指定int
,因为这是我们想要传递的,如果有任何传递?
/**
* @param int|null $bar
*/
function foo($bar = null) {
if(is_null($bar)) {
return 'ABC';
}
return doSomething($bar);
}
示例 2:实例属性。我们只希望 $bar 包含整数。也就是说,如果没有为 bar 设置任何内容,则此实例属性的默认 PHP 值为 null。我是否需要在每个使用 $bar 的地方都考虑到这一点,可能的 null 类型如下?
class Foo {
/**
* @var int|null
*/
public $bar;
/**
* @param int|null $bar
*/
public setBar( $bar) {
$this->bar = $bar;
}
/**
* @return int|null
*/
public function getBar() {
return $this->bar;
}
}
基本上,我发现自己几乎在每一个@param
和@var
声明中都乱扔垃圾,|null
因为从技术上讲,它可能就是那个价值。但在实践中不应该如此。我是否应该期望我的几乎所有类型都包含null
或应该假设的可能性,并且我应该避免指定它,除非我希望null
明确设置或接收一个值?