gpt4 book ai didi

php - Doctrine/Symfony 一对多关系中 getSomethings 的返回值是多少?

转载 作者:行者123 更新时间:2023-12-04 02:01:50 24 4
gpt4 key购买 nike

我喜欢类型提示或从 PHP7 开始实际显示 getter 函数的返回值。但是由于 Doctrine/Symfony 中的一对多关系,我仍然卡住了,不确定要添加到 @var 中的内容。标签。

[...]

/**
* @var string
* @ORM\Column(name="name", type="string")
*/
private $features;


/**
* What goes into var here?
*
* One Product has Many Features.
* @ORM\OneToMany(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 ?还是 ArrayCollection ?我很想使用 Features[]为了使用Feature的功能,如果我需要(而不是typehinting),但感觉不对。

什么是“最干净”/稳定的方式来做到这一点?

最佳答案

如果你想保留文档 block ,我会使用联合类型 |同时指定 Collection 和它包含的值列表,例如:

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

有了这个,当您从集合中获取单个对象时,您的 IDE 应该既可以从 Collection 中找到方法,也可以找到 Feature-type 提示,例如在一个foreach。

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

我在项目中倾向于将 Collection 保留在实体中,并且只在 getter 中传递一个数组,如下所示:
public function getFeatures(): array
{
return $this->features->toArray();
}

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

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

关于php - Doctrine/Symfony 一对多关系中 getSomethings 的返回值是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46658803/

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