gpt4 book ai didi

php - 我们应该直接访问 protected 属性还是使用 getter?

转载 作者:可可西里 更新时间:2023-11-01 13:14:21 25 4
gpt4 key购买 nike

我们应该直接访问 protected 属性还是使用 PHP 中的 getter?

我有两个类,一个是另一个的女儿。在母亲中,我将某些属性声明为 protected ,并为我的属性生成所有 getter。因此,我可以直接或通过 getter 访问和定义这些属性,但我不知道是否有更好的解决方案。

示例:

class Mother {

private $privateProperty;
protected $protectedProperty;
public $publicProperty;

/*** Private property accessors ***/

public function setPrivateProperty($value)
{
$this->privateProperty = $value;
}

public function getPrivateProperty()
{
return $this->privateProperty;
}

/*** Protected property accessors ***/

public function setProtectedProperty($value)
{
$this->protectedProperty = $value;
}

public function getProtectedProperty()
{
return $this->protectedProperty;
}
}

class Child extends Mother {

public function showProtectedProperty() {
return $this->getProtectedProperty(); // This way ?
return $this->protectedProperty; // Or this way ?
}

public function defineProtectedProperty() {
$this->setProtectedProperty('value'); // This way ?
$this->protectedProperty = 'value'; // Or this way ?
}
}

在示例中,我知道我不能直接访问/设置私有(private)属性,而且它对公共(public)属性没有用。但是我可以对 protected 属性(property)使用这两种方式。那么,有什么标准可以使用吗?

最佳答案

当您确实也在类层次结构中使用 getter 和 setter 时,就会实现最佳封装。这意味着:属性应该是私有(private)的并且 getter/setter 是 protected (如果不是公共(public)的)。

例如,如果您想要记录对某些属性的访问,想要添加过滤方法或其他检查,如果您只是在派生类中访问这些属性,则整个机制将被删除。

(当然,在某些情况下,您只是公开属性以缩短代码,因为您知道该类实际上只是一个数据持有者......然而,在那种情况下,这些属性仍然不会公开 protected 但只是公开)

关于php - 我们应该直接访问 protected 属性还是使用 getter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35459107/

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