gpt4 book ai didi

PHP 7.4+ 类属性类型

转载 作者:行者123 更新时间:2023-12-05 03:36:29 24 4
gpt4 key购买 nike

我敢肯定这个问题已经被问过很多次了,但我似乎找不到一个好的/令人满意的答案,所以请耐心等待。

使用 PHP 7.4+,我倾向于输入我能输入的所有内容。但是我对 Doctrine 实体属性有一些问题。

如果我输入的所有内容都正确,我通常会遇到很多这样的错误。

Typed property App\Entity\User::$createdAt must not be accessed before initialization

该类型错误的代码示例如下所示

/**
* @var DateTimeInterface
* @ORM\Column(type="datetime")
*/
protected DateTimeInterface $createdAt;

因此,即使数据库字段不是,我也曾将属性设置为可为空。所以它看起来像这样。

/**
* @var DateTimeInterface|null
* @ORM\Column(type="datetime")
*/
protected ?DateTimeInterface $createdAt = null;

但是,现在我有另一个问题。我决定在我的项目中实现一个静态代码分析器,现在我正在使用 PHPStan。所以现在,当我扫描我的代码时,我会遇到类似的错误。


Line src/Entity/Trait/TimestampableEntityPropertiesTrait.php (in context of class App\Entity\Article)


16 Property App\Entity\Article::$createdAt type mapping mismatch: property can contain DateTimeInterface|null but database expects DateTimeInterface.


那么,处理这种情况的正确方法是什么?

如有任何建议,我们将不胜感激。

编辑

我应该提到,有时我不想/不能在构造函数中初始化属性,因为我还没有正确的值。

最佳答案

我不确定这是否是一种不好的做法,但事实证明我只需要从 phpstan 配置中删除该检查即可。

# phpstan.neon
parameters:
doctrine:
allowNullablePropertyForRequiredField: true

编辑:

经过一些挖掘,我意识到我应该使用允许空值的 DTO,然后在准备好(且有效)后将其传输到我的实体。这样,我的实体始终有效,而且我不会冒险刷新数据库中的一些无效数据。

关于PHP 7.4+ 类属性类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69579676/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com