Symfony实体默认将所有字段设置为可空

时间:2019-12-06 15:05:13

标签: php symfony

将所有getter字段设置为默认值可为空是正确的决定

/**
 * @return int|null
 */
public function getId(): ?int
{
    return $this->id;
}

这样做的解释是您可以创建实体并调用方法

$entinty = new Entity();
$entity->getId();

,如果没有可为空的符号,它将是致命错误。但是为什么有人会做这种事情,或者还有其他副作用呢?

是正确的事情还是开销?

1 个答案:

答案 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。