2

不确定这是否是一个问题。我对受保护/私有属性和方法的理解是它们只能从类中访问。我有一个静态方法,它是一种将对象保存到数据库的快速方法。我从静态方法中创建对象并通过 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'
));

此代码有效。通过作品,我的意思是创建的日期设置成功。为什么?

4

2 回答 2

1

受保护的属性可以由类中的代码修改,而不仅仅是从该类的实例中修改。

于 2013-09-26T19:23:52.967 回答
0

因为你在课堂上设置它。setter 通常用于从类外部设置变量,例如 Person::set_name('Bob Barker')。但是如果你尝试过 Person->created = date(),它应该会失败。

于 2013-09-26T19:23:14.893 回答