为什么我们通常使用doctrine2类的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;
}
- 不能对延迟加载的元素所需的属性创建代理调用。这是条令使用得相当重的工具
- Getter和setter通常比属性更具灵活性
- 如果getter和setter的开销是一个真正的问题,那么您可能应该考虑从PHP切换到一些"通用更快"的平台
因为类的成员(变量)通常(并且应该)是私有的或受保护的。
因此,我们使用一个公共的set/get方法来存储和检索它们的数据,否则这些数据在类之外是不可用的。
公开类成员可能会导致它们被意外覆盖,因此为了防止这种情况,我们限制了访问权限。阅读encapsulation
。
在条令实体类的情况下,操作传入/传出数据也很有用,这只能用公共方法来完成。
在另一个SO论坛上有一个很好的解释。
与公共属性或setter不同,在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;
}
}
只有在需要的时候才使用getter。