ホームページ >バックエンド開発 >PHPチュートリアル >PHP における __set __get __isset __unset の使用法の概要 オブジェクト指向_PHP チュートリアル

PHP における __set __get __isset __unset の使用法の概要 オブジェクト指向_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-20 11:10:52764ブラウズ

PHP オブジェクト指向では __set __get __isset __unset などの使い方をよく見かけますが、なぜこれらが使われるのか分かりません。一つずつ使い方を紹介していきます。

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

//__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;


}

__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」を渡します。このメソッドの実行により代入の目的は達成されます。メンバーのプロパティがプライベートとしてカプセル化されていない場合、オブジェクト自体はこのメソッドを自動的に呼び出しません。不正な値を渡さないように、このメソッドで判定することもできます。コードは次のとおりです:

コードは次のとおりです

class person


{


//以下は、のメンバー属性です。 person、すべてカプセル化されたプライベートメンバーです


private $name; //その人の名前


private $sex;


private function __get($property_name)


echo "プライベート プロパティ値を取得すると、この __get() メソッドが自動的に呼び出されます
";


if(isset( $this->$property_name))


{


return($this->$property_name) ;


}


else


{


return(NULL);


}


}


//__set()メソッドはプライベートプロパティを設定するために使用されます


プライベート関数__set ($property_name, $value)


{


echo "プライベート プロパティ値を直接設定する場合、この __set() メソッドが自動的に呼び出され、プライベート プロパティに値を割り当てます
";



$this->$property_name = $value;


}


}

$p1=new Person();


//値をプライベート属性に直接割り当てる場合、__set( ) メソッドが自動的に呼び出され、値が割り当てられます


$p1->name="张三";


$p1-> sex="male";


$p1->age=20 ;


//プライベート属性の値を直接取得すると、__get() メソッドが自動的に呼び出され、メンバー属性の値が返されます


echo "Name :".$p1->name."< ;br>gt;";


echo "性別:".$p1->性別。"
";


echo "年齢:".$p1->年齢。"
" ;


?>


プログラムの実行結果:
プライベート属性の値を直接設定する場合、__set()メソッドが自動的に呼び出され、プライベート属性に値が割り当てられます。
プライベート属性の値を直接設定する場合、__set()メソッドは割り当て
プライベート属性の値を直接設定する場合、__set()メソッドが自動的に呼び出され、プライベート属性に値を割り当てます
プライベート属性の値を直接取得する場合、 __get()メソッドが自動的に呼び出されます
名前:Zhang San
Inプライベート属性値を直接取得する場合、この__get()メソッドが自動的に呼び出されます
性別:男性
プライベート属性値を直接取得する場合、この__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()」関数を見てみましょう。「unset()」の関数は、指定された変数を削除し、true を返すことです。変数が削除されます。では、オブジェクトの外部にあるオブジェクト内のメンバー属性を削除したい場合は、「unset()」関数を使用できますか? オブジェクト内のメンバー属性がパブリックである場合、この関数を使用して削除できます。オブジェクトのパブリック属性。オブジェクトのメンバー属性がプライベートである場合、同様に、オブジェクトに「__unset()」メソッドを追加する場合も同様です。 、オブジェクトのプライベート メンバー プロパティから削除できます。 「__unset()」メソッドをオブジェクトに追加した後、オブジェクトの外部で「unset()」関数を使用してオブジェクト内のプライベートメンバー属性を削除すると、「__unset()」関数が自動的に呼び出され、オブジェクト内のプライベート メンバー属性。このメソッドはクラス内でプライベートとして定義することもできます。次のコードをオブジェクトに追加するだけです:

コードは次のとおりですコードをコピーhttp://www.bkjia.com/PHPjc/444688.html
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)

{


$this->$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() 関数は、プライベートメンバーを測定するときに自動的に
bool(true) を呼び出します

これは人の名前です

unset() がクラス外で使用される場合、関数は自動的に呼び出されますプライベート メンバー
__set()、__get()、__isset()、__unset() を削除するときに呼び出されます。これらの 4 つのメソッドはすべてオブジェクトに追加され、オブジェクト内のプライベート プロパティに対する操作を完了するために必要なときに自動的に呼び出されます。




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

www.bkjia.com

tru​​e

技術記事

PHPのオブジェクト指向では __set __get __isset __unset などの使い方をよく見かけますが、なぜこれらが使われるのか分かりません...一つずつ紹介していきます


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。