只是一個簡單的問題。我見過許多情況下,代碼等實現的以下內容:OOP - 使用私有財產和公共獲取者
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();
那麼,什麼是使用私有屬性和公衆有干將,而不是使性能市民和直接訪問他們喜歡的原因:
$user->firstname;
PS:如果我使用第二種方法,可以嗎?
編輯
好像我沒有問這個問題之前,研究以及(猜我用錯了鍵搜索的主題)。下面是幾乎同樣的問題的另一個很好的答案:https://stackoverflow.com/a/1568230/1075534
基本上,對我而言,使用getters和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;
}
}
對於那些誰仍然對此事有疑問,我建議他們讀戈登提供的材料,特別是,我已經掛了答案。
你應該閱讀代碼完成2。它有一個關於這個主題和其他軟件開發概念的很好的解釋。 – Gohn67