不知道這是否甚至是一個問題。我對受保護/私有財產和方法的理解是,他們只能在課堂上進行訪問。我有一個靜態方法,這是一種將對象保存到數據庫的快速方法。我通過靜態方法創建對象並通過setter函數設置屬性。然而,一個屬性沒有setter,但我仍然可以訪問它。我有一個類,它看起來是這樣的:PHP從靜態方法訪問對象的受保護屬性
class Person {
protected $name;
protected $email;
protected $created;
//set name
public function set_name($name) {
$this->name = $name;
}
//set email
public function set_email($email) {
$this->email = $email;
}
//add new person
static function add($data) {
$person = new Person;
$person->set_name($data['name']);
$person->set_email($data['email']);
//set created date
$person->created = date('Y-m-d h:ia', time());
//save to db
$db->add($data);
return $person;
}
}
實施看起來是這樣的:
$person = Person::add(array(
'name' => 'Bob Barker',
'email' => '[email protected]'
));
此代碼的工作。通過作品我的意思是創建日期成功設置。爲什麼?
不是你的'add'方法是寫另一個構造函數的方法嗎? – Barmar
當然。只是一種不同的方法。該類在整個應用程序中有更多的用途,所以我選擇將我的方法保存到DB中。 – Chris