ホームページ  >  記事  >  バックエンド開発  >  PHPの__getと__setの使用例を詳しく解説

PHPの__getと__setの使用例を詳しく解説

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

コードをコピーします
コードは次のとおりです:

class Person {

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

private $name; // 人の名前
private $sex; // 人の性別
private $age
//プライベート プロパティを取得するために __get() メソッドが使用されます
private function __get($ property_name)
{
echo "プライベート プロパティ値を直接取得する場合、__get() メソッドが自動的に呼び出されます
"; ->$property_name) ;
}
else
{
return(NULL);
}
}
//__set() メソッドはプライベート プロパティの設定に使用されます
private function __set($property_name, $value)
{ echo "プライベート プロパティを直接設定する 値が設定されると、__set() メソッドが自動的に呼び出され、プライベート プロパティに値が割り当てられます
";
$this->$property_name = $value; $p1=newPerson();
// プライベート属性に値を直接割り当てると、割り当てのために __set() メソッドが自動的に呼び出されます
$p1->name="张三"; Male";
$p1->age =20;
//プライベート属性の値を直接取得すると、__get() メソッドが自動的に呼び出され、メンバー属性の値が返されます
echo "Name:".$ p1->名前."
";
echo "性別:".$p1->性別"
";
echo "年齢:".$p1->age."< ;br>";
?>


プログラム実行結果:
プライベート属性の値を直接設定する場合、この__set()メソッドが自動的に呼び出され、プライベート属性に値が代入されます
プライベート属性の値を直接設定する場合、このメソッドは自動的に呼び出されます_ _set() メソッドはプライベート属性に値を割り当てます
プライベート属性の値を直接設定する場合、この __set() メソッドが自動的に呼び出され、プライベート属性に値を割り当てます
ときプライベート属性の値を直接取得する場合、このメソッドは自動的に呼び出されます_ _get() メソッド
名前: Zhang San
プライベート属性の値を直接取得する場合、このメソッドは自動的に呼び出されます
性別: 男性
プライベート属性値を直接取得する場合、この __get() メソッドが自動的に呼び出されます
年齢: 20 歳

上記のコードで __get() メソッドと __set() メソッドが追加されていない場合、プログラムはエラーになりますプライベート メンバーはクラスの外部で操作できないため、上記のコードは __get() メソッドと __set() メソッドを自動的に呼び出すことで、カプセル化されたプライベート メンバーに直接アクセスするのに役立ちます。

この記事は http://www.jb51.net/article/37900.htm からの転載です

上記では、PHP の __get と __set の詳細な使用例を、関連する内容も含めて紹介しています。PHP チュートリアルに興味のある友人の参考になれば幸いです。

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