不确定这是否是一个问题。我对受保护/私有属性和方法的理解是它们只能在类中访问。我有一个静态方法,它是一种将对象保存到数据库的快速方法。我从静态方法中创建对象,并通过setter函数设置属性。然而,一个属性没有setter,但我仍然可以访问它。我有一个看起来像这样的课程:
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' => 'bob@thepriceisright.com'
));
此代码有效。通过工作我的意思是创建日期成功设置。为什么呢?
答案 0 :(得分:1)
受保护的属性可以通过类中的代码进行修改,而不仅仅是来自该类的实例。
答案 1 :(得分:0)
因为你在课堂上设置它。 setter通常用于从类外部设置变量,例如Person :: set_name('Bob Barker')。但是如果你尝试了Person-> created = date(),它就会失败。