-
- //__set() メソッドは、プライベート プロパティを設定するために使用されます
- public function __set($name,$value){
- $this->$name = $value;
- }
-
- / /__get() メソッドはプライベート プロパティを取得するために使用されます
- public function __get($name){
- return $this->$name;
- }
- ?>
コードをコピー
__get()メソッド: このメソッドは、プライベート メンバー属性値を取得するために使用されます。パラメーターは取得したいメンバー属性の名前で渡され、このメソッドは取得する必要はありません。このメソッドを使用することもできるため、プライベート プロパティが直接取得されると、オブジェクトによってプライベート メソッドが自動的に呼び出されます。 private プロパティはカプセル化されているため、値を直接取得することはできませんが、このメソッドをクラスに追加すると、「echo$p1->name」などのステートメントを使用したときに自動的に呼び出され、値を直接取得することができます。 __get($name) メソッドは、属性名をパラメーター $name に渡します。このメソッドの内部実行を通じて、渡したプライベート属性の値が返されます。メンバーのプロパティがプライベートとしてカプセル化されていない場合、オブジェクト自体はこのメソッドを自動的に呼び出しません。
__set() メソッド: このメソッドは、プライベート メンバー属性の値を設定するために使用されます。最初のパラメーターは値を設定する属性の名前で、2 番目のパラメーターは属性に設定する値。戻り値はありません。このメソッドは手動で呼び出す必要はなく、プライベート属性値を直接設定するときに自動的に呼び出されます。__set() メソッドが存在しない場合は、このメソッドは呼び出されません。例: $this->name='zhangsan' を許可すると、プライベート プロパティに値を直接割り当てるときに __set($property_name, $value) メソッドがクラスに追加されると、エラーが発生します。自動的に呼び出して、$property_nameにnameなどの属性を渡し、$valueに代入する値「zhangsan」を渡すことで、代入の目的は達成されます。
メンバーのプロパティがプライベートとしてカプセル化されていない場合、オブジェクト自体はこのメソッドを自動的に呼び出しません。不正な値を渡さないように、このメソッドで判定することもできます。
例:
- class person
- {
- //人のメンバー属性はすべてカプセル化されたプライベートメンバーです
- private $name //人の名前
- private $sex //人の性別
- private $age; /人の年齢
- //__get() メソッドはプライベート プロパティを取得するために使用されます
- private function __get($property_name)
- {
- echo "プライベート プロパティの値を直接取得する場合、この __get は自動的に ()method
と呼ばれます。" ;
- if(isset($this->$property_name))
- {
- return($this->$property_name);
- }
- else
- {
- return(NULL);
- }
- }
- //__set( ) メソッドはプライベート プロパティの設定に使用されます
- プライベート関数 __set($property_name, $value)
- {
- echo "プライベート プロパティの値を直接設定する場合、この __set() メソッドはプライベート プロパティの割り当てとして自動的に呼び出されます
";
- $this->$property_name = $value;
- }
- }
- $p1=newPerson();
- //プライベート プロパティに値を直接割り当てる操作では、値を割り当てるために __set( ) メソッドが自動的に呼び出されます
- $p1 ->name="張三";
- $p1->sex="男性";
- $p1->age=20;
- //プライベート属性の値を直接取得します。自動的に __get が呼び出されます。 () メンバー属性の値を返すメソッド
- echo "Name:".$p1->name."
";
- echo "Gender:".$p1->sex."< ;br> ;";
- echo "年齢:".$p1->age."
";
- ?>
-
コードをコピー
プログラムの実行結果:
プライベート属性の値を直接設定する場合、__set() メソッドが自動的に呼び出され、プライベート属性に値が割り当てられます。
プライベート属性の値を直接設定する場合、__set() メソッドが自動的に呼び出され、プライベート属性に値が割り当てられます。
プライベート属性の値を直接設定する場合、__set() メソッドが自動的に呼び出され、プライベート属性に値が割り当てられます。
private 属性値を直接取得する場合は、__get() メソッドが自動的に呼び出されます。
名前:張三(チャン・サン)
private 属性値を直接取得する場合は、__get() メソッドが自動的に呼び出されます。
性別: 男性
private 属性値を直接取得する場合は、__get() メソッドが自動的に呼び出されます。
年齢: 20歳
上記のコードでは、__get() メソッドと __set() メソッドが追加されていない場合、プログラムが誤動作します。これは、プライベート メンバーをクラス外で操作できないためです。また、上記のコードでは、__get() メソッドと __set() メソッドが自動的に呼び出され、カプセル化されたプライベート メンバーに直接アクセスします。
これで、皆さんが __get() と __set() の使い方を理解できるようになることを願っています。
|