我很困惑何时使用 null
用PHPDoc描述变量时的类型。类型提示是否应该描述外部呼叫者预期和遵守的希望和期望,或者他们是否应该记录变量的所有可能类型,即使希望它在实践中是一种非常特定的类型?
示例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的每个地方,可能的空类型如下所示?
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
明确?