只是一个简单的问题。我见过很多代码实现如下的情况:
class User
{
private $id;
private $firstname;
private $lastname;
public function __construct() { some code }
public function getId() { return $this->id; }
public function getFirstname() { return $this->firstname; }
public function setFirstname($value) { $this->firstname = $value; }
}
// And properties are accessed like:
$user->getFirstname();
$user->getId();
那么使用私有属性和拥有公共 getter 的原因是什么,而不是公开属性并直接访问它们,例如:
$user->firstname;
PS:我用第二种方法可以吗?
编辑
好像我在问这个问题之前没有好好研究(我猜我使用了错误的键来搜索这个主题)。这是(几乎)相同问题的另一个很好的答案:https ://stackoverflow.com/a/1568230/1075534
基本上,就我而言,使用 getter 和 setter 的一个很好的理由是避免更改直接访问该属性的 250 个类。例如,假设我没有使用 getter:
class User
{
public $firstname = 'abc';
public $lastname = 'cde';
}
$user = new User();
echo $user->firstname . ' ' . $user->lastname;
现在,假设我想改变我的应用程序的行为,我决定将名称打印为大写。在这种情况下,我将搜索每个实现(在这种情况下为 250 :) 并在我调用属性的任何地方将输出大写。但是,如果我使用 getter,那么我只会更改 getter 方法:
class User
{
private $firstname = 'abc';
private $lastname = 'def';
public getFirstname()
{
return ucfirst(strtolower($this->firstname));
}
public getLastname()
{
return ucfirst(strtolower($this->lastname));
}
}
另外,请记住,getter 可能不仅会从单个属性中收集信息。想象一下:
class User
{
private $firstname = 'abc';
private $lastname = 'def';
public function getName()
{
return $this->firstname . ' ' . $this->lastname;
}
}
对于那些对此仍有疑问的人,我建议他们阅读 Gordon 提供的材料,尤其是我链接的答案。