在一种教条/象征主义的一对多关系中,getSomethings的回报值是多少



我喜欢在PHP7中键入hint或开始实际显示getter函数的返回值。但对于Doctrine/Symfony中的一对多关系,我仍然被卡住了,不确定该在@var标签中添加什么。

[...]
/**
* @var string
* @ORMColumn(name="name", type="string")
*/
private $features;

/**
* What goes into var here?
*
* One Product has Many Features.
* @ORMOneToMany(targetEntity="Feature", mappedBy="product")
*/
private $features;
public function __construct()
{
$this->features = new ArrayCollection();
$this->name = 'New Product Name';
}
/**
* @return Collection
*/
public function getFeatures(): Collection
{
return $this->features;
}

[...]

目前我正在使用@var Collection,然后可以使用Collection函数。但什么才是回归的"正确"呢?它真的是Collection吗?还是ArrayCollection?如果需要的话,我很想使用Features[]来使用Feature的功能(而不是类型提示),但感觉不对。

什么是"最干净"/稳定的方法?

如果您想保留docblock,我会使用并集类型|来指定Collection及其包含的值列表,如:

/**
* @var Collection|Feature[]
*/

这样,当您从集合中获得单个对象时,IDE应该既能找到Collection中的方法,也能找到Feature类型提示,例如在foreach中。

至于ArrayCollection与Collection的问题,通常建议为接口键入hint(在本例中为Collection)。ArrayCollection提供了更多的方法,但除非您真的需要它们,否则我不会为了获取它们而使用类型提示。

在项目中,我倾向于将Collection保留在实体中,只在getter中传递一个数组,如下所示:

public function getFeatures(): array
{
return $this->features->toArray();
}
public function setFeatures(array $features): void
{
$this->features = new ArrayCollection($features);
}

请注意,PHP 7.0中还不支持void返回类型。返回数组的好处是,在您的代码中,您不必担心使用哪种Collection Doctrine。该类主要用于维护Doctrine的工作单元中对象之间的引用,因此它不应该真正成为您关注的一部分。

相关内容

  • 没有找到相关文章

最新更新