【发布时间】:2012-09-21 22:16:11
【问题描述】:
在使用 PHPDoc 描述变量时,我对何时使用 null 作为类型感到困惑。类型提示是否应该描述外部调用者预期和遵守的希望和期望,还是应该记录变量的所有可能类型,即使希望它在实践中是一种非常具体的类型?
示例 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 的值,否则我应该避免指定它?
【问题讨论】: