ホームページ > php教程 > php手册 > PHP オブジェクト指向ガイド (6) __set() __get() __isset() __unset() の使い方

PHP オブジェクト指向ガイド (6) __set() __get() __isset() __unset() の使い方

WBOY
リリース: 2016-06-13 12:21:38
オリジナル
783 人が閲覧しました

10. 4 つのメソッドの適用 __set() __get() __isset() __unset()
一般に、クラスの属性は常にプライベートとして定義します。これは、より現実的なロジックに沿ったものです。ただし、
の読み取りと属性の割り当て操作は非常に頻繁に行われるため、PHP5 では、
を取得してその属性を割り当てるための 2 つの関数 "__get()" と "__set()" が事前定義されています。属性を確認するための「__isset()」メソッドと属性を削除するための「__unset()」メソッド。
前のセクションでは、各属性の設定および取得メソッドを説明しました。PHP5 では、属性
、「__set()」および「__get()」の値を設定および取得するための特別なメソッドが提供されています。 "。これら 2 つのメソッドは、デフォルトでは存在しません。
これらは手動でクラスに追加されます。コンストラクター メソッド (__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 members 属性値の場合、パラメータは取得したい
メンバー属性の名前で渡され、取得された属性値が返されるため、このメソッドを手動で呼び出す必要はありません。
メソッドを作成することもできます。プライベート プロパティが直接取得されると、オブジェクトによってプライベート メソッドが自動的に呼び出されます。プライベート属性は
でカプセル化されているため、値を直接取得することはできません (例: "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; //個人の性別<🎜; >private $age; //個人の年齢
//__get() メソッドはプライベート プロパティを取得するために使用されます
private function __get($property_name){
echo "プライベート プロパティの値を直接取得する場合、これは__get() メソッドが自動的に呼び出されます< ;br>";
if(isset($this->$property_name)) {
return($this->$property_name);
}else {
return(NULL);
}
}
//__set() メソッドはプライベート プロパティの設定に使用されます
プライベート関数 __set($property_name, $value){
echo "プライベート プロパティ値を直接設定すると、この __set() メソッドがプライベート プロパティに値を割り当てるために自動的に呼び出されます
";
$this->gt;$property_name = $value;
}
}
$p1=new Person( );
//プライベート属性に値を直接割り当てると、__set() メソッドが自動的に呼び出され、値が割り当てられます。
$ p1->age=20;
//プライベート属性の値を直接取得します。__get() メソッドが自動的に呼び出され、メンバー属性の値が返されます
echo "Name:" .$p1 ->名前."
";
echo "性別:".$p1->性別."
";
echo "年齢:".$p1- >年齢."
"
?>


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



コードをコピー

コードは次のとおりです: private function __isset($nm){

echo "isset() 関数がプライベート メンバー $nm を決定するためにクラス外で使用される場合、この関数は自動的に呼び出されます

return isset($this) -> $nm);
}


__unset() メソッド: このメソッドを説明する前に、まず「unset()」関数を見てみましょう。
この関数の機能は、指定された変数を削除し、true を返すことです。パラメータは削除する変数です。では、オブジェクト

の外側のオブジェクト内のメンバー属性を削除したい場合は、「unset()」関数を使用できますか?
オブジェクト内のメンバー属性がパブリックである場合、次の 2 つの状況が考えられます。この関数は、オブジェクトの外部にあるオブジェクトのパブリック属性を削除します。
オブジェクトのメンバー属性がプライベートである場合、この関数を使用してそれらを削除する権限はありませんが、「__unset(」を追加した場合も同様です。 ()」メソッドを使用すると、オブジェクトの外部にあるオブジェクトのプライベートメンバー属性を削除できます。オブジェクト
に「__unset()」メソッドを追加した後、オブジェクトの外部で「unset()」関数を使用してオブジェクト内のプライベート
メンバー属性を削除すると、「__unset()」関数はこのメソッドは、クラス内でプライベートとして定義することもできます。次のコードをオブジェクトに追加するだけです:
コード スニペット



コードをコピー

コードは次のとおりです: private function __unset($nm){ echo "プライベート メンバーを削除するために unset() 関数がクラス外で使用されると自動的に呼び出されます

unset($this->$nm); 🎜>}



完全な例を見てみましょう:
コード スニペット


コードをコピー

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


class 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() プライベート プロパティの設定に使用されるメソッド
プライベート関数 __set($property_name, $value){
$this->$property_name = $value
}
//__isset( ) method
private function __isset($nm){
echo "isset() 関数がプライベート メンバーを決定すると、自動的に呼び出されます

return isset($this->$) nm);
}
//__unset() メソッド
private function __unset($nm){
echo "プライベート メンバーを削除するために unset() 関数がクラス外で使用されると自動的に呼び出されます< ;br>";
unset($this->$nm);
}
}
$p1=新しい人();
$p1->name="thisは人の名前です";
// isset() 関数を使用してプライベート メンバーを測定する場合、完了を支援するために __isset() メソッドが自動的に呼び出され、返される結果は true になります
echo var_dump(isset ($p1->name))."
;";
echo $p1->name."
// unset() 関数を使用してプライベートを削除する場合メンバーの場合、タスクを完了して名前を削除するために __unset() メソッドが自動的に呼び出されます。プライベート属性
unset($p1->name)// は削除されているため、出力はありません。この行
echo $p1->name;
?>


出力結果は次のとおりです:
isset() 関数はプライベート メンバーを決定すると、自動的に呼び出します。

bool(true)
これは人の名前です
クラス () 関数の外で unset を使用してプライベート メンバーを削除する場合、
__set()、__get()、__isset() の 4 つのメソッドが使用されます。 、および __unset() はすべてオブジェクトに追加され、必要に応じて
が自動的に呼び出され、オブジェクト内部のオブジェクト外部のプライベート プロパティの操作を完了します。
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート