ホームページ  >  記事  >  バックエンド開発  >  PHP での __get() および __set マジック メソッドの使用例

PHP での __get() および __set マジック メソッドの使用例

WBOY
WBOYオリジナル
2016-07-25 08:59:06951ブラウズ
  1. //__set() メソッドは、プライベート プロパティを設定するために使用されます
  2. public function __set($name,$value){
  3. $this->$name = $value;
  4. }
  5. / /__get() メソッドはプライベート プロパティを取得するために使用されます
  6. public function __get($name){
  7. return $this->$name;
  8. }
  9. ?>
コードをコピー

__get()メソッド: このメソッドは、プライベート メンバー属性値を取得するために使用されます。パラメーターは取得したいメンバー属性の名前で渡され、このメソッドは取得する必要はありません。このメソッドを使用することもできるため、プライベート プロパティが直接取得されると、オブジェクトによってプライベート メソッドが自動的に呼び出されます。 private プロパティはカプセル化されているため、値を直接取得することはできませんが、このメソッドをクラスに追加すると、「echo$p1->name」などのステートメントを使用したときに自動的に呼び出され、値を直接取得することができます。 __get($name) メソッドは、属性名をパラメーター $name に渡します。このメソッドの内部実行を通じて、渡したプライベート属性の値が返されます。メンバーのプロパティがプライベートとしてカプセル化されていない場合、オブジェクト自体はこのメソッドを自動的に呼び出しません。

__set() メソッド: このメソッドは、プライベート メンバー属性の値を設定するために使用されます。最初のパラメーターは値を設定する属性の名前で、2 番目のパラメーターは属性に設定する値。戻り値はありません。このメソッドは手動で呼び出す必要はなく、プライベート属性値を直接設定するときに自動的に呼び出されます。__set() メソッドが存在しない場合は、このメソッドは呼び出されません。例: $this->name='zhangsan' を許可すると、プライベート プロパティに値を直接割り当てるときに __set($property_name, $value) メソッドがクラスに追加されると、エラーが発生します。自動的に呼び出して、$property_nameにnameなどの属性を渡し、$valueに代入する値「zhangsan」を渡すことで、代入の目的は達成されます。

メンバーのプロパティがプライベートとしてカプセル化されていない場合、オブジェクト自体はこのメソッドを自動的に呼び出しません。不正な値を渡さないように、このメソッドで判定することもできます。

例:

  1. class person
  2. {
  3. //人のメンバー属性はすべてカプセル化されたプライベートメンバーです
  4. private $name //人の名前
  5. private $sex //人の性別
  6. private $age; /人の年齢
  7. //__get() メソッドはプライベート プロパティを取得するために使用されます
  8. private function __get($property_name)
  9. {
  10. echo "プライベート プロパティの値を直接取得する場合、この __get は自動的に ()method
    と呼ばれます。" ;
  11. if(isset($this->$property_name))
  12. {
  13. return($this->$property_name);
  14. }
  15. else
  16. {
  17. return(NULL);
  18. }
  19. }
  20. //__set( ) メソッドはプライベート プロパティの設定に使用されます
  21. プライベート関数 __set($property_name, $value)
  22. {
  23. echo "プライベート プロパティの値を直接設定する場合、この __set() メソッドはプライベート プロパティの割り当てとして自動的に呼び出されます
    ";
  24. $this->$property_name = $value;
  25. }
  26. }
  27. $p1=newPerson();
  28. //プライベート プロパティに値を直接割り当てる操作では、値を割り当てるために __set( ) メソッドが自動的に呼び出されます
  29. $p1 ->name="張三";
  30. $p1->sex="男性";
  31. $p1->age=20;
  32. //プライベート属性の値を直接取得します。自動的に __get が呼び出されます。 () メンバー属性の値を返すメソッド
  33. echo "Name:".$p1->name."
    ";
  34. echo "Gender:".$p1->sex."< ;br> ;";
  35. echo "年齢:".$p1->age."
    ";
  36. ?>
コードをコピー
プログラムの実行結果: プライベート属性の値を直接設定する場合、__set() メソッドが自動的に呼び出され、プライベート属性に値が割り当てられます。 プライベート属性の値を直接設定する場合、__set() メソッドが自動的に呼び出され、プライベート属性に値が割り当てられます。 プライベート属性の値を直接設定する場合、__set() メソッドが自動的に呼び出され、プライベート属性に値が割り当てられます。 private 属性値を直接取得する場合は、__get() メソッドが自動的に呼び出されます。 名前:張三(チャン・サン) private 属性値を直接取得する場合は、__get() メソッドが自動的に呼び出されます。 性別: 男性 private 属性値を直接取得する場合は、__get() メソッドが自動的に呼び出されます。 年齢: 20歳 上記のコードでは、__get() メソッドと __set() メソッドが追加されていない場合、プログラムが誤動作します。これは、プライベート メンバーをクラス外で操作できないためです。また、上記のコードでは、__get() メソッドと __set() メソッドが自動的に呼び出され、カプセル化されたプライベート メンバーに直接アクセスします。

これで、皆さんが __get() と __set() の使い方を理解できるようになることを願っています。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。