PHP オブジェクト指向 _get()、_set() の使い方__set() メソッドは属性の値を設定し、__get() メソッドは属性の値を取得します。これらのメソッドは両方とも手動でプログラムに追加する必要があります。次に、これらの使用法を詳しく見てみましょう。 2つの方法です。
一般的に、クラスの属性は常にプライベートとして定義します。これは、より現実的なロジックに沿ったものです。ただし、属性の読み取りと代入の操作は非常に頻繁に行われるため、PHP5 では、属性を取得および代入するための 2 つの関数「__get()」と「__set()」があらかじめ定義されています。これは Java での Javabean の操作に似ており、使用されるメソッドも同様ですが、Javabean のように各フィールドで set および get 操作を実行する必要がない点が異なります。 2 つの魔法のメソッドを追加するだけです。つまり、プライベートメンバーの値を設定・取得する操作です。 PHP5 には、属性の値を設定および取得するための特別なメソッド、「__set()」と「__get()」という 2 つのメソッドが用意されています。これら 2 つのメソッドはデフォルトでは存在しませんが、手動でクラスに追加します。 , コンストラクター メソッド (__construct()) と同様に、クラス内に追加された場合にのみ存在します。これら 2 つのメソッドは次の方法で追加できます。もちろん、個人的なスタイルに従って追加することもできます:
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 }
__get() メソッド: このメソッドは、プライベート メンバー属性値を取得するために使用されます。パラメーターがあり、パラメーターは取得したいメンバー属性の名前で渡され、取得された属性値が返されます。このメソッドはプライベート プロパティを直接取得するときにオブジェクトによって自動的に呼び出されるプライベート メソッドにすることもできるため、このメソッドを手動で呼び出す必要はありません。 private プロパティはカプセル化されているため、値を直接取得することはできませんが、このメソッドをクラスに追加すると、「echo$p1->name」などの文を使用したときに自動的に値を直接取得できるようになります。 __get($name) メソッドを使用し、属性名をパラメーター $name に渡します。このメソッドの内部実行を通じて、渡したプライベート属性の値が返されます。メンバーのプロパティがプライベートとしてカプセル化されていない場合、オブジェクト自体はこのメソッドを自動的に呼び出しません。
__set() メソッド: このメソッドはプライベート メンバー属性の値を設定するために使用されます。これには 2 つのパラメーターがあります。最初のパラメーターは値を設定する属性の名前で、2 番目のパラメーターは値を設定する属性の名前です。パラメータは設定する属性です。値を設定します。戻り値はありません。このメソッドも手動で呼び出す必要はありません。プライベートにすることもできます。プライベート属性値を直接設定するときに自動的に呼び出されます。同じプライベート属性はカプセル化されています。
。__set() がない場合、メソッドは次のようになります。許可されません。例: $this->name='zhangsan' の場合、エラーが発生しますが、__set($property_name, $value) メソッドをクラスに追加すると、代入時にプライベート プロパティを直接設定できます。値を指定すると自動的に呼び出され、$property_nameにnameなどの属性を渡し、$valueに代入する値「zhangsan」を渡し、このメソッドを実行することで代入の目的が達成されます。メンバーのプロパティがプライベートとしてカプセル化されていない場合、オブジェクト自体はこのメソッドを自動的に呼び出しません。不正な値を渡さないように、このメソッドで判定することもできます。コードは次のとおりです。
1 <?php 2 class Person 3 { 4 //下面是人的成员属性,都是封装的私有成员 5 private $name; //人的名子 6 private $sex; //人的性别 7 private $age; //人的年龄 8 //__get()方法用来获取私有属性 9 private function __get($property_name) 10 { 11 echo "在直接获取私有属性值的时候,自动调用了这个__get()方法<br>"; 12 if(isset($this->$property_name)) 13 { 14 return($this->$property_name); 15 } 16 else 17 { 18 return(NULL); 19 } 20 } 21 //__set()方法用来设置私有属性 22 private function __set($property_name, $value) 23 { 24 echo "在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值<br>"; 25 $this->$property_name = $value; 26 } 27 } 28 $p1=newPerson(); 29 //直接为私有属性赋值的操作,会自动调用__set()方法进行赋值 30 $p1->name="张三"; 31 $p1->sex="男"; 32 $p1->age=20; 33 //直接获取私有属性的值,会自动调用__get()方法,返回成员属性的值 34 echo "姓名:".$p1->name."<br>"; 35 echo "性别:".$p1->sex."<br>"; 36 echo "年龄:".$p1->age."<br>"; 37 ?>
プログラムの実行結果:
プライベート属性値を直接設定する場合、__set()メソッドが自動的に呼び出され、プライベート属性値が割り当てられます。
プライベート属性値を直接設定する場合属性値を指定すると、プライベート属性に値を割り当てるために __set() メソッドが自動的に呼び出されます。
プライベート属性の値を直接設定する場合、プライベート属性に値を割り当てるために __set() メソッドが自動的に呼び出されます
プライベート属性の値を直接取得する場合、この __get() メソッドが自動的に呼び出されます。
Name: Zhang San
プライベート属性の値を直接取得する場合、この __get() メソッドが自動的に呼び出されます。
Gender:男性
プライベート属性値を直接取得する場合 プライベート属性値を追加する場合、自動的に __get() メソッドが呼び出されます
年齢: 20 歳
上記のコードで __get() と __set() が追加されない場合メソッドを使用すると、プライベート メンバーのクラス外部操作では使用できないため、プログラムは問題が発生します。また、上記のコードは、__get() メソッドと __set() メソッドを自動的に呼び出すことで、カプセル化されたプライベート メンバーに直接アクセスするのに役立ちます。
関連する推奨事項:
以上がPHPで_get()、_set()を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。