PHP オブジェクト指向では __set __get __isset __unset などの使い方をよく見かけますが、なぜこれらが使われるのか分かりません。一つずつ使い方を紹介していきます。
一般的に言えば、クラス属性は常にプライベートとして定義してください。これはより現実的なロジックに沿ったものです。ただし、属性の読み取りと割り当ての操作は非常に頻繁に行われるため、PHP5 では、属性を取得して割り当てるための 2 つの関数「__get()」と「__set()」、および属性を確認するための「__isset」が事前定義されています。 )」と属性を削除するメソッド「__unset()」。
前のセクションでは、各属性の設定および取得メソッドを説明しました。PHP5 には、属性の値を設定および取得するための特別なメソッド「__set()」および「__get()」メソッドが用意されています。デフォルトで存在しますが、コンストラクター メソッド (__construct()) と同様に、これら 2 つのメソッドは次の方法で追加する場合にのみ存在します。 、個人的なスタイルに従って追加することもできます:
//__get() メソッドはプライベート プロパティを取得するために使用されます
コードは次のとおりです | コードをコピーします |
private function __get($ property_name)
|
__get() メソッド: このメソッドは、プライベート メンバー属性値を取得するために使用されます。パラメーターは、取得したいメンバー属性の名前で渡され、取得された属性値が返されます。このメソッドを手動で呼び出す必要はありません。これは、このメソッドをプライベート メソッドにすることもできるため、プライベート プロパティが直接取得されたときにオブジェクトによって自動的に呼び出されます。 private プロパティはカプセル化されているため、値を直接取得することはできません (例: "echo $p1->name" を直接取得するのは誤りです)。ただし、このメソッドをクラスに追加する場合は、「 「echo $p1->name」は値を直接取得し、__get($property_name) メソッドが自動的に呼び出され、このメソッドの内部実行を通じてプロパティ名がパラメータ $property_name に渡されます。渡した属性の値が返されます。メンバーのプロパティがプライベートとしてカプセル化されていない場合、オブジェクト自体はこのメソッドを自動的に呼び出しません。
__set() メソッド: このメソッドは、プライベート メンバー属性の値を設定するために使用されます。最初のパラメーターは、値を設定する属性の名前です。2 番目のパラメーターは、必要な値です。属性に設定する戻り値はありません。このメソッドは手動で呼び出す必要はなく、プライベート属性値を直接設定するときに自動的に呼び出されます。 __set() メソッドが存在しない場合は許可されません。例: $this->name='zhangsan' の場合、エラーが発生しますが、クラスに __set($property_name, $value) メソッドを追加すると、プライベート プロパティに値を直接割り当てることができます。呼び出されると自動的に呼び出され、$property_nameにnameなどの属性を渡し、$valueに代入する値「zhangsan」を渡します。このメソッドの実行により代入の目的は達成されます。メンバーのプロパティがプライベートとしてカプセル化されていない場合、オブジェクト自体はこのメソッドを自動的に呼び出しません。不正な値を渡さないように、このメソッドで判定することもできます。コードは次のとおりです:
コードをコピー | |||||||
コードは次のとおりです | コードをコピー |
private function __isset($nm)
|
__unset() メソッド: このメソッドを見る前に、まず「unset()」関数を見てみましょう。「unset()」の関数は、指定された変数を削除し、true を返すことです。変数が削除されます。では、オブジェクトの外部にあるオブジェクト内のメンバー属性を削除したい場合は、「unset()」関数を使用できますか? オブジェクト内のメンバー属性がパブリックである場合、この関数を使用して削除できます。オブジェクトのパブリック属性。オブジェクトのメンバー属性がプライベートである場合、同様に、オブジェクトに「__unset()」メソッドを追加する場合も同様です。 、オブジェクトのプライベート メンバー プロパティから削除できます。 「__unset()」メソッドをオブジェクトに追加した後、オブジェクトの外部で「unset()」関数を使用してオブジェクト内のプライベートメンバー属性を削除すると、「__unset()」関数が自動的に呼び出され、オブジェクト内のプライベート メンバー属性。このメソッドはクラス内でプライベートとして定義することもできます。次のコードをオブジェクトに追加するだけです:
コードをコピー | |
private function __unset($nm)
{ echo "クラス外で unset( を使用する場合) プライベート メンバーを削除するときに自動的に呼び出す関数 unset($this->$nm); } class Person { //以下は person のメンバー属性です private $name; age; //人の年齢 //__get() メソッドを使用して取得しますプライベートプロパティ プライベート関数 __get($property_name) { if(isset($this->$property_name) ) { return($this->$property_name); }else { return(NULL); } } //__set() メソッド プライベートプロパティの設定に使用されます プライベート関数 __set($property_name, $value) { //__isset()メソッド プライベート関数__isset($nm) { エコー"isset() 関数がプライベート メンバーを決定すると、自動的に return isset($this->$nm ; unset($this-> $nm); } } $p1=new Person(); $p1->name= "this is a person name"; // issetを使用する場合() 関数を使用してプライベート メンバーを測定すると、完了を支援するために __isset() メソッドが自動的に呼び出され、返される結果は true echo var_dump(isset($p1- >name)) です。" echo $p1->name." // unset() 関数を使用してプライベート メンバーを削除すると、自動的に呼び出されます_ _unset() メソッドは、 name を削除します private 属性 unset($p1->name); // は削除されているため、この行には出力はありません echo $p1-> ;name; ?> isset() 関数は、プライベートメンバーを測定するときに自動的に unset() がクラス外で使用される場合、関数は自動的に呼び出されますプライベート メンバー
www.bkjia.com |
技術記事
PHPのオブジェクト指向では __set __get __isset __unset などの使い方をよく見かけますが、なぜこれらが使われるのか分かりません...一つずつ紹介していきます