Symfony 4 实体 getter 和 setter return 值

Symfony 4 Entity getter and setter return values

当我从字段为空的数据库中获取值时,出现以下错误。

Return value of App\Entity\Settings::getDescription() must be of the type string, null returned

该值被保存为空值。 下面是该字段的获取方法。

public function getDescription(): string
{
    return $this->description;
}

当我删除 "colon" 之后的代码时,我没有收到上述错误。有解决此问题的解决方法吗?

您指定的 return 类型 string 与值 null 不匹配。除了完全删除 return 类型外,还有很多方法可以解决这个问题:

  1. 使 return 类型可选

    public function getDescription(): ?string
    

这将允许 null 或字符串,这会立即解决您的问题。缺点是,每当您调用 getDescription() 时,您可能不得不处理这个 null 导致丑陋的代码,如下所示:

$description = $entity->getDescription();
if (null === $description) {
    // Do something with null
}
// Do something

有了描述,这可能不是问题。如果你有一些其他数据,如 DateTime 如果你想格式化日期时间或将其与另一个日期时间值进行比较,接收 null 可能会有问题。

这就是为什么第二个选项有意义:

  1. 确保值被填充:

    public function getDescription(): string
    {
        return$this->description ?? '';
    }
    

    或:

    private $description = '';
    
    public function getDescription(): string
    {
        return$this->description;
    }
    

此方法或其他方法可确保无论何时未设置数据库值,它将使用默认值,例如一个空字符串。这可能并不总是有意义。

还有其他方法可以解决这个问题,但它们是否有意义在很大程度上取决于您所处的环境。上面的 2 种方法是解决您的问题的常见方法:可空 return 类型或显式在您的数据库或代码中定义的默认值而不是 null。