ホームページ  >  記事  >  バックエンド開発  >  PHP オブジェクト指向ガイド (6) __set() __get() __isset() __unset() の使い方_PHP チュートリアル

PHP オブジェクト指向ガイド (6) __set() __get() __isset() __unset() の使い方_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:43:54684ブラウズ

10. 4 つのメソッドの適用 __set() __get() __isset() __unset()
一般的に言えば、クラスの属性は常にプライベートとして定義します。これは、より現実的なロジックに沿ったものです。ただし、属性の読み取りと代入の操作は非常に頻繁に行われるため、PHP5 では、属性の取得と代入、および属性の確認を行う「__isset()」という 2 つの関数「__get()」と「__set()」があらかじめ定義されています。属性を削除するメソッド「__unset()」。
前のセクションでは、各属性の設定および取得メソッドを説明しました。PHP5 には、属性の値を設定および取得するための特別なメソッド「__set()」と「__get()」が用意されています。デフォルトでは存在しません
が、コンストラクター メソッド (__construct()) と同様に、クラスに追加された場合にのみ存在します
これら 2 つのメソッドを追加するには、次の方法で実行できます。もちろん、個人のスタイルに応じて追加することもできます:
コード スニペット



コードをコピー

コードは次のとおりです: //__get() メソッドはプライベート プロパティを取得するために使用されます
プライベート関数 __get ( $property_name){
if(isset($this->$property_name)) {
return($this->$property_name)
}else {
return(NULL);
//__set();メソッド プライベート プロパティの設定に使用されます
private function __set($property_name, $value){
$this->$property_name = $value;
}


__get() メソッド: このメソッドは、private の値を取得するために使用されます。メンバー属性。パラメータは取得したい
メンバー属性の名前で渡され、このメソッドも作成できるため、手動で呼び出す必要はありません。プライベートメソッド。プライベート属性の場合、オブジェクトによって自動的に呼び出されます。 private プロパティはカプセル化されているため、値を直接取得することはできません (例: "echo $p1->name" を直接取得するのは誤りです)、
このメソッドをクラスに追加すると、次のようなステートメントを使用する場合"echo $p1->name" 値を直接取得するには、__get($property_name) メソッドが自動的に呼び出され、属性名がパラメータ $property_name に渡され、このメソッドの内部実行を通じて、次の値が返されます。渡されるプライベート プロパティの値。メンバーのプロパティがプライベートとしてカプセル化されていない場合、オブジェクト自体はこのメソッドを自動的に呼び出しません。
__set() メソッド: このメソッドは、プライベート メンバー属性の値を設定するために使用されます。最初のパラメーターは、値を設定する属性の名前です。属性に設定された値はありません。このメソッドは、プライベート属性値を直接設定するときに、手動で呼び出す必要はありません。 __set() メソッドが存在しない場合は、このメソッドが自動的に呼び出されます。例:
$this->name='zhangsan' は許可されません。これは失敗しますが、__set($property_name, $value) を追加すると
このメソッドは直接プライベートです。プロパティに値が割り当てられると、が自動的に呼び出され、
$property_nameにnameなどの属性を渡し、$valueに代入する値「zhangsan」を渡すことで、代入の目的は達成されます。メンバーのプロパティがプライベートとしてカプセル化されていない場合、オブジェクト自体はこのメソッドを自動的に呼び出しません。不正な
値を渡さないように、このメソッドで判断することもできます。コードは次のとおりです: コード スニペット



コードをコピーします

コードは次のとおりです:


class Person{
//以下は個人のメンバー属性です。カプセル化されたプライベート メンバー
private $name; // 人の名前
private $sex; // 人の性別
//__get() メソッドはプライベート プロパティを取得するために使用されますprivate function __get($property_name) ){ echo "プライベート プロパティの値を設定すると、__get() メソッドが自動的に呼び出されます
" if(isset($this->$property_name)) { return($this ->$property_name); } else {
return(NULL);
}
}
//__set() メソッドはプライベート プロパティを設定するために使用されます
private function __set($property_name, $value){
echo "プライベート プロパティ値を直接設定するときに呼び出されます。プライベート プロパティに値を割り当てるには、この __set() メソッドを使用します
";
$this->$property_name = $value;
}
}
$p1=new Person() ;
//プライベート プロパティに値を直接割り当てると、割り当てのために __set() メソッドが自動的に呼び出されます
$p1->name="Zhang San";
$p1->
$p1->age=20;
/ /プライベート属性の値を直接取得すると、__get() メソッドが自動的に呼び出され、
echo "Name:" の値が返されます。 $p1->名前."
";
echo "性別:". $p1->性別."
";
echo "年齢:".$p1->age."
";
?>


プログラムの実行結果:
プライベート属性の値を直接設定する場合、__set()メソッドが自動的に呼び出され、プライベート属性に値が割り当てられます。
プライベート属性値を直接設定する場合は、__set()メソッドが自動的に呼び出され、プライベート属性値が割り当てられます。
プライベート属性値を直接取得する場合は、__get()メソッドが自動的に呼び出されます。
名前: Zhang San
プライベート属性値を取得する場合、この__get()メソッドが自動的に呼び出されます
性別: 男性
プライベート属性値を直接取得する場合、この__get()メソッドが自動的に呼び出されます
年齢: 20歳
上記のコードの __get() メソッドと __set() メソッドを追加しない場合、プライベート メンバーはクラス外で操作できないため、プログラムは誤動作します。また、上記のコードは、__get() と __set メソッドを自動的に呼び出すことで直接役に立ちます。 () メソッド。カプセル化されたプライベート
メンバーへのアクセス。
__isset() メソッド: このメソッドを説明する前に、「isset()」関数の応用を見てみましょう。 isset() は、変数がパラメータとして設定されているかどうかを判断するために使用される関数です。渡された変数が存在する場合は true を返し、それ以外の場合は false を返します。
それでは、オブジェクトの外部で「isset()」関数を使用して、オブジェクト内のメンバーが設定されているかどうかを判断する場合、それを
使用できますか?オブジェクト内のメンバーがパブリックである場合、この関数を使用してメンバー属性を決定できます。その理由は、プライベートなメンバー属性がカプセル化されているためです。外側。それでは、オブジェクトの外部で「isset()」関数を使用して、プライベートメンバー属性が設定されているかどうかを判断することはできないのでしょうか?はい、「__isset()」メソッドをクラスに追加するだけで済みます。「isset()」関数をクラス外で使用して、オブジェクト内のプライベートメンバーが設定されているかどうかを判断すると、自動的に「__isset」が呼び出されます。クラス内の ()" メソッドは、このような操作を完了するのに役立ちます。"__isset()" メソッドをプライベートにすることもできます。次のコードをクラスに追加するだけです:
コードスニペット



コードをコピー

コードは次のとおりです:

private function __isset($nm){ echo "isset(クラス外で)を使用する場合関数は自動的に
"; return isset($this->$nm); }
__unset() メソッド: このメソッドを見る前に、最初に実行しましょう。 )" 関数。"unset()"
この関数の機能は、指定された変数を削除し、true を返すことです。パラメータは削除する変数です。オブジェクトの外部からオブジェクト内のメンバー属性を削除したい場合、「unset()」関数を使用できますか? オブジェクト内のメンバー属性がパブリックである場合、この関数を使用して削除できます。オブジェクトのメンバー属性を外部から削除します。オブジェクトのメンバー属性がプライベートである場合、この関数を使用してそれらを削除する権限はありません。ただし、同様に、「__unset. ()" メソッドをオブジェクトに追加すると、オブジェクトのプライベート メンバー プロパティをオブジェクトの外部で削除できます。 "__unset()" メソッドをオブジェクト
に追加した後、オブジェクトの外で "unset()" 関数を使用してオブジェクト内のプライベート
メンバー属性を削除すると、"__unset()" 関数が自動的に呼び出され、オブジェクトの内部のプライベートメンバー属性を削除する場合、このメソッドはクラス内でプライベートとして定義することもできます。次のコードをオブジェクトに追加するだけです:
コード スニペット


コードをコピー

コードは次のとおりです:


private function __unset($nm){
echo "クラス外で unset() 関数を使用する場合
"; プライベートメンバーを削除するときに自動的に呼び出されます;
unset($this->$nm);
}
完全な例を見てみましょう: コードスニペット

コードをコピー

コードは次のとおりです:

class person{
//以下は person のメンバー属性です
private $name //その人の名前
private $sex; //その人の性別
private $age;人の年齢
//__get() メソッドはプライベート プロパティを取得するために使用されます
private function __get($property_name){
if(isset($this->$property_name)){
return($this->$property_name) ;}else {
return(NULL);
}
}
}
//__set() メソッドはプライベート プロパティの設定に使用されます
private function __set($property_name, $value){
$this->$property_name = $value;
}
//__isset() メソッド
private function __isset($nm){
echo "isset() 関数がプライベート メンバーを決定すると、自動的に呼び出されます

return isset($this- >$nm);
}
//__unset() メソッド
private function __unset($nm){
echo "プライベート メンバーを削除するために unset() 関数が使用されると自動的に呼び出されます
"; unset($this-> ;$nm);
}
}
$p1=new Person();
$p1->name="これは人の名前です"
// isset( ) プライベートメンバーを決定する関数 __isset() メソッドはそれを完了するのに役立ち、戻り結果は true です
echo var_dump(isset($p1->name))."
"; ;name."
" ;
// unset() 関数を使用してプライベート メンバーを削除すると、タスクを完了して name プライベート属性を削除するために __unset() メソッドが自動的に呼び出されます
unset($p1 ->name);
//この行からの出力はありません
echo $p1->name?>


出力結果は次のようになります:
isset() 関数プライベートメンバーを測定するときに
bool(true) を呼び出します
これは人の名前です
クラス外で unset() 関数を使用するときに自動的に呼び出される 4 つのメソッド __set()、__get()、__isset()、および __unset()プライベート メンバーを削除するためのメソッドは、必要に応じてすべてオブジェクトに追加されます。
オブジェクト内部のオブジェクト外部のプライベート プロパティに対する操作を完了するために自動的に呼び出されます。



http://www.bkjia.com/PHPjc/320645.html

www.bkjia.com

http://www.bkjia.com/PHPjc/320645.html技術記事 10. 4 つのメソッドの適用 __set() __get() __isset() __unset() 一般に、クラスの属性は常にプライベートとして定義され、これはより現実的なロジックに沿っています。ただし、プロパティへの値の読み取りと代入は...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。