将所有getter字段设置为默认值可为空是正确的决定
/**
* @return int|null
*/
public function getId(): ?int
{
return $this->id;
}
这样做的解释是您可以创建实体并调用方法
$entinty = new Entity();
$entity->getId();
,如果没有可为空的符号,它将是致命错误。但是为什么有人会做这种事情,或者还有其他副作用呢?
是正确的事情还是开销?
答案 0 :(得分:1)
这取决于。
您的示例中不会出现致命错误,但这真的有意义吗?此时将永远没有可用的ID,因此您实际上不应调用它。
这就是我决定这样做的方式: 是否必须设置?然后甚至将其设置为这样的默认值
public $withDefault = true;
public function getWithDefault(): bool { ... }
或在构造函数中强制使用值
public $enforced;
public function __construct(int $enforced) { $this->enforced = $enforced; }
public function getEnforced(): int { ... }
在这些情况下,getter不会返回null。
对于所有其他情况,如果该字段可以为null,则应使其依赖于数据库字段,getter可以返回null。而且,如果它不能为null,那么getter也不应返回null。