これが質問であるかどうかはわかりません。保護された/プライベートなプロパティとメソッドについての私の理解は、クラス内からのみアクセスできるということです。オブジェクトをデータベースに保存するための簡単な方法のような静的メソッドがあります。静的メソッド内からオブジェクトを作成し、setter 関数を使用してプロパティを設定します。ただし、1 つのプロパティにはセッターがありませんが、まだアクセスできます。次のようなクラスがあります。
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'
));
このコードは機能します。作品とは、作成日が正常に設定されることを意味します。なんで?