PHP5 では、属性の値を設定および取得するための特別なメソッド、「__set()」と「__get()」の 2 つのメソッドが提供されています。これらの 2 つのメソッドはデフォルトでは存在しませんが、手動で追加します。クラスでは、コンストラクター メソッド (__construct()) と同様に、これら 2 つのメソッドを次の方法で追加することもできます。 :
//__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」を渡します。このメソッドの実行により代入の目的は達成されます。メンバーのプロパティがプライベートとしてカプセル化されていない場合、オブジェクト自体はこのメソッドを自動的に呼び出しません。不正な値を渡さないように、このメソッドで判定することもできます。コードは以下の通りです:
<?php class Person { //下面是人的成员属性,都是封装的私有成员 private $name; //人的名子 private $sex; //人的性别 private $age; //人的年龄 //__get()方法用来获取私有属性 private function __get($property_name) { echo "在直接获取私有属性值的时候,自动调用了这个__get()方法<br>"; if(isset($this->$property_name)) { return($this->$property_name); } else { return(NULL); } } //__set()方法用来设置私有属性 private function __set($property_name, $value) { echo "在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值<br>"; $this->$property_name = $value; } } $p1=newPerson(); //直接为私有属性赋值的操作,会自动调用__set()方法进行赋值 $p1->name="张三"; $p1->sex="男"; $p1->age=20; //直接获取私有属性的值,会自动调用__get()方法,返回成员属性的值 echo "姓名:".$p1->name."<br>"; echo "性别:".$p1->sex."<br>"; echo "年龄:".$p1->age."<br>"; ?> 程序
実行結果:
プライベート属性の値を直接設定する場合、__set()メソッドが自動的に呼び出され、プライベート属性に値が代入されます
プライベート属性の値を直接設定する場合は、__set()メソッドが自動的に呼び出され、プライベート属性に値が割り当てられます
値を直接取得する場合private 属性の値を取得すると、__get() メソッドが自動的に呼び出されます
名前: Zhang San
private 属性値を直接取得する場合、この __get() メソッドが自動的に呼び出されます
性別: 男性
private 属性値を直接取得する場合、この __get () メソッドが自動的に呼び出されます
年齢: 20 歳
上記のコードで __get() メソッドと __set() メソッドを追加しない場合、プライベート メンバーはクラス外で操作できないため、プログラムが誤動作し、上記のコードが自動的に呼び出されます__get() および __set() メソッドを呼び出して、カプセル化されたプライベート メンバーに直接アクセスできるようにします。
関連する推奨事項:
php のマジック メソッド __get()、__set()、__call()、__callStatic() と静的使用法の詳細な説明 マジック メソッド __get() の例の詳細な説明 (php の高度なオブジェクト)指向チュートリアル2)PHP_PHPチュートリアルの__get()と__set()の使用例を詳しく解説以上がPHP の __get() と __set の使用状況分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。