ホームページ  >  記事  >  バックエンド開発  >  PHP_PHPチュートリアルの__get()と__set()の使用例を詳しく説明

PHP_PHPチュートリアルの__get()と__set()の使用例を詳しく説明

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

PHP オブジェクト指向の _get()、_set() の使用法
一般的に言えば、クラスの属性は常にプライベートとして定義します。これは、より現実的なロジックに沿ったものです。ただし、属性の読み取りと代入の操作は非常に頻繁に行われるため、PHP5 では属性の取得と代入を行うための 2 つの関数「__get()」と「__set()」があらかじめ定義されています。これは Java での Javabean の操作に似ており、使用されるメソッドも同様ですが、Javabean のように各フィールドで set および get 操作を実行する必要がない点が異なります。 2 つの魔法のメソッドを追加するだけです。つまり、プライベートメンバーの値を設定・取得する操作です。 PHP5 には、属性の値を設定および取得するための特別なメソッド「__set()」と「__get()」が用意されています。これらの 2 つのメソッドはデフォルトでは存在しませんが、内部のクラスに手動で追加します。 、コンストラクター メソッド (__construct()) と同様に、クラス内に追加された場合にのみ存在します。これら 2 つのメソッドは次の方法で追加できます。もちろん、個人のスタイルに従って追加することもできます。

コードをコピーします コードは次のとおりです:
//__set() メソッドはプライベート プロパティを設定するために使用されます
public function __set($name,$value){
$this->$name = $value ;
}
//__get() メソッドはプライベート属性を取得するために使用されます
public function __get($name){
return $this->$name;


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



コードをコピーします
コードは次のとおりです: class person
{
//以下は、すべてカプセル化された person のメンバー属性です。 private members
private $name; //個人名
private $sex; //個人の性別
private $age; //個人のプロパティを取得するために __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; ();
//直接プライベート属性に値を割り当てる場合、__set() メソッドが自動的に呼び出され、値が割り当てられます
$p1->name="张三"; ="male";
$p1->age= 20;
//プライベート属性の値を直接取得すると、__get() メソッドが自動的に呼び出され、メンバー属性の値が返されます
echo "Name: " .$p1->名前."
";
echo " 性別: ".$p1->性別。"
";
echo "年齢: ".$p1->年齢。 "


;
プログラムの実行結果: プライベート属性の値を直接設定する場合、__set()メソッドが自動的に呼び出され、プライベート属性に値が割り当てられます。
プライベート属性の値を直接設定する場合、__set()メソッドが呼び出されます。プライベート属性の割り当て
プライベート属性値を直接設定する場合、__set() メソッドが自動的に呼び出され、プライベート属性値が割り当てられます
プライベート属性値を直接取得する場合、__get() メソッドが自動的に呼び出されます
名前: Zhang San
private 属性値を直接取得する場合、__get() メソッドが自動的に呼び出されます
性別: 男性
private 属性値を直接取得する場合、__get() メソッドが自動的に呼び出されます
年齢: 20 歳
上記のコードの場合__get() メソッドと __set() メソッドがないと、プライベート メンバーをクラスの外部で操作できないため、プログラムは正常に動作しません。また、上記のコードは、カプセル化されたプライベート メソッドに直接アクセスする __get() メソッドと __set() メソッドを自動的に呼び出すことで役に立ちます。メンバー。

http://www.bkjia.com/PHPjc/327357.htmlwww.bkjia.com本当http://www.bkjia.com/PHPjc/327357.html技術記事一般に、php オブジェクト指向の _get() および _set() を使用すると、常にクラスの属性がプライベートとして定義され、これはより現実的なロジックに沿ったものになります。ただし、属性の読み取りと割り当ての操作は非常に頻繁に行われます...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。