Php 为什么对doctrine2类使用getter setter
为什么我们通常使用doctrine2类的getter setter来保存和获取数据 如下图所示:Php 为什么对doctrine2类使用getter setter,php,oop,doctrine-orm,Php,Oop,Doctrine Orm,为什么我们通常使用doctrine2类的getter setter来保存和获取数据 如下图所示: <?php // src/Product.php class Product { /** * @var int */ protected $id; /** * @var string */ protected $name; public function getId() { return
<?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;
}
}
因为类的成员(变量)通常(并且应该)是私有的或受保护的
因此,我们使用一个公共的set/get方法来存储和检索数据,否则这些数据在类之外是不可用的
公开类成员可能会导致意外重写它们,因此为了防止这种情况,我们限制访问。阅读封装
在条令实体类的情况下,操纵传入/传出数据也很有用,这只能通过公共方法来实现
在不同的SO论坛上进行了很好的解释
不能对惰性加载元素所需的属性创建代理调用。这是一个被教条大量使用的工具
一般来说,getter和setter比属性提供了更多的灵活性
<> LI>如果吸气剂和定位器的开销是一个真正的问题,你应该考虑从PHP切换到一些“更快的通用”平台。
与公共属性或setter相比,有更可靠的方法使用、或。我建议你检查一下
有了这些,您就可以通过构造函数传递所需的属性。就你而言:
<?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 setters。请看“避免写幼稚的二传手和二传手”,它在哪里说的?避免写幼稚的二传手和二传手:我想你误解了他们。他们举的例子是公共成员,而不是私人成员。在这种情况下,他们是对的。但是在很少的情况下,你会希望使用公共成员。
<?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;
}
}