当我从字段为空的数据库中获取值时,出现以下错误。
App \ Entity \ Settings :: getDescription()的返回值必须是字符串类型,返回null
该值另存为null。 下面是该字段的获取方法。
public function getDescription(): string
{
return $this->description;
}
当我在“冒号”之后删除代码时,没有出现以上错误。有解决此问题的解决方法吗?
答案 0 :(得分:1)
您指定的返回类型string
与值null
不匹配。除了完全删除返回类型之外,还有许多方法可以解决此问题:
使返回类型为可选
public function getDescription(): ?string
这将允许null或字符串,从而立即解决您的问题。缺点是,每当您调用getDescription()
时,您可能都必须处理此null,从而导致如下丑陋的代码:
$description = $entity->getDescription();
if (null === $description) {
// Do something with null
}
// Do something
通过描述,这可能不是问题。如果您想要格式化日期时间或将其与另一个datetime值进行比较,则如果您有其他数据,例如DateTime
接收null
可能会出现问题。
这就是第二种选择可能有意义的原因:
确保该值已填充:
public function getDescription(): string
{
return$this->description ?? '';
}
或:
private $description = '';
public function getDescription(): string
{
return$this->description;
}
此方法或其他方法可确保每当未设置数据库值时,它将使用默认值,例如一个空字符串。这可能并不总是有意义。
还有其他方法可以解决此问题,但是它们是否有意义很大程度上取决于您正在使用的上下文。以上那两种是解决问题的非常常见的方法:可为空的返回类型或在数据库中定义的显式默认值或在您的代码中而不是null。