为什么我们通常使用docterine2类的getter setter来保存和获取数据?
如下所示:
<?php
// src/Product.php
class Product
{
/**
* @var int
*/
protected $id;
/**
* @var string
*/
protected $name;
public function getId()
{
return $this->id;
}
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
}
如果我们公开了类属性,我们可以在没有getter setter的情况下保存数据。不是吗?
<?php
// src/Product.php
class Product
{
/**
* @var int
*/
public $id;
/**
* @var string
*/
public $name;
}
答案 0 :(得分:6)
答案 1 :(得分:2)
因为类(变量)的成员通常(并且应该)是私有的或受保护的。
因此我们使用公共set / get方法来存储和检索来自它们的数据,否则这些数据在类之外是不可用的。
将类成员公开可能会导致它们被意外覆盖,因此为了防止这种情况,我们限制访问。阅读encapsulation
。
对于doctrine实体类,操作传入/传出数据也很有用,只能使用公共方法。
heres在不同的SO论坛上做了很好的解释。
答案 2 :(得分:2)
而不是公共属性或设置者,使用immutable objects或value objects或embeddables when around Doctrine的更多SOLID方法。我建议你检查一下。
拥有这些,您可以通过构造函数传递所需的属性。在你的情况下:
<?php
class Product
{
/**
* @var int
*/
private $id;
/**
* @var string
*/
private $name;
/**
* @param int $id
* @param string $name
*/
public function __construct($id, $name)
{
$this->id = $id;
$this->name = $name;
}
}
仅在需要时使用吸气剂。