gpt4 book ai didi

php - 可以在实体中放置 hasSomething() 或 isSomething 之类的方法吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:35:14 24 4
gpt4 key购买 nike

我们总是在 Symfony2 中将实体用作仅具有 setter 和 getter 的普通 PHP 对象。但是如果我们在一个实体中有集合,那么在其中放置方法可能会有用,比如 hasSomeProperty($name) 或 isSomething($someType)。例如:

class User
{
/** @var ArrayCollection */
private $friends;

public function hasFriend($name)
{
foreach ($this->friends as $friend) {
if ($friend->getName() === $name) {
return true;
}
}

return false;
}
}

从一个角度来看,此方法包含不应放在实体中的逻辑。但是这样的逻辑只与这个实体有关,所以根据得墨忒耳法则,实体是写它的正确位置。你对此有何看法?

最佳答案

将这些 hasX()isX() 方法添加到您的实体中绝对没问题,而且是一种很好的做法,我个人认为这是放置它们的正确位置。

将这些方法保留在您的实体中的主要论点是您可以访问 privateprotected 属性来计算 hasX()isX() 的结果。

否则 - 抛开反射 - 您需要通过为不用于任何其他目的的属性创建 getter 函数来向公共(public) API 公开(可能是明智的)信息。

您甚至可能最终会添加大量的 getter 函数,这些函数...仅用于在外部计算结果。

您可以在 FOSUserBundle 的 Model\User 类中看到一个示例。 ( Code )

关于php - 可以在实体中放置 hasSomething() 或 isSomething 之类的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29914707/

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