ホームページ  >  記事  >  バックエンド開発  >  【転送】PHPオブジェクト指向_get(),set()の使い方

【転送】PHPオブジェクト指向_get(),set()の使い方

WBOY
WBOYオリジナル
2016-06-13 13:02:41772ブラウズ

【転送】PHPオブジェクト指向_get(),_set()の使い方

一般に、クラスの属性は常に private として定義されます。これはより現実的なロジックに沿ったものです。ただし、 は属性の読み取りと割り当てを頻繁に行うため、PHP5 では、2 つの関数 "__get()」と「__set()」を使用して、そのプロパティ を取得して割り当て、「__isset」をチェックします属性の場合は「()」、属性の削除の場合は「__unset()」です。
前のセクションでは、各属性のメソッドを設定および取得しました。PHP5 では、属性の値を設定および取得するための特別なメソッドが提供されています。 「__set()」と「__get()」の 2 つのメソッド。これら 2 つのメソッドはデフォルトでは存在しません。 は、コンストラクター メソッド (__construct()),? のように、手動でクラスに追加するものです。これら 2 つのメソッドは、次の方法で追加することもできます。
//__get() メソッドはプライベート属性を取得するために使用されます
プライベート関数?__get($property_name)
{
if(isset($this->$プロパティ名))
{
return($this->$property_name);
}その他
{
return(NULL);
}
}
//__set() メソッドはプライベート プロパティを設定するために使用されます
プライベート関数?__set($property_name,?$value )
{
$この->$property_name?=?$ ;
}
__get() メソッド: このメソッドは、プライベート メンバー属性値 を取得するために使用されます。 には 1 つのパラメーターがあり、パラメータが渡されます。取得したいメンバー属性の名前。取得した属性値を返します。 このメソッドをプライベート メソッドにすることもできるため、このメソッドを手動で呼び出す必要はありません。 は、プライベート プロパティを直接取得するときにオブジェクトによって自動的に呼び出されます。プライベート属性はカプセル化されているため、値を直接取得することはできません (例: "echo $p1->name"はエラーです)このように直接取得します) が、このメソッドをクラスに追加する場合は、 "echo $p1->name" などのステートメントを使用して直接取得します値を取得すると、自動的に __get($property_name) メソッドが呼び出され、属性 name がパラメータ に渡されます。 >$ property_name は、このメソッドの内部実行を通じて、渡したプライベート プロパティの値を返します。メンバーのプロパティがプライベートとしてカプセル化されていない場合、オブジェクト自体はこのメソッドを自動的に呼び出しません。
__set() メソッド: このメソッドは、プライベート メンバー属性の値を設定するために使用されます。最初のパラメーターは、値を設定する属性の名前です。 2 番目のパラメータはプロパティに設定される値です。戻り値はありません。このメソッドは手動で呼び出す必要はなく、プライベート属性値を直接設定するときに自動的に呼び出されます。
__set() メソッドがない場合、それは許可されません。 例: $this->name='zhangsan',?これは失敗しますが、 __set($property_name, $value) メソッドがクラスに追加され、プライベート プロパティに値を直接代入すると自動的に呼び出され、次のようなプロパティが追加されます。 name$property_name,?に割り当てられる値 "zhangsan" を $value に代入し、このメソッドを実行することで代入の目的が達成されます。メンバーのプロパティがプライベートとしてカプセル化されていない場合、オブジェクト自体はこのメソッドを自動的に呼び出しません。不正な値を渡さないように、 がこのメソッドで判断することもできます。コードは次のとおりです:

クラス?

{

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

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

private $性別; ????????//人の性別

private $年齢; ????????//人の年齢

//__get() メソッドはプライベート属性を取得するために使用されます
プライベート関数?__get($property_name)

{

echo?" は、プライベート属性値 を直接取得するときに、この __get()メソッド を自動的に呼び出します。
";
if(isset($this->$プロパティ名))
{
return($this->$property_name);
}
その他
{
return(NULL);
}
}
//__set() メソッドはプライベート プロパティを設定するために使用されます
プライベート関数?__set($property_name,?$value )
{
echo?"プライベート属性の値を直接設定する場合、この __set() メソッドは、プライベート属性の割り当て
"
;

$この->$property_name?=?$ ;
}
}
$p1=新しい?人();
//プライベート属性に値を直接割り当てる操作は、自動的に __set() メソッドを呼び出して値を割り当てます
$p1->name="チャン・サン" ;
$p1->sex="男性";
$p1->年齢=20;
// はプライベート属性の値を直接取得し、自動的に __get() メソッドを呼び出してメンバー属性の値を返します
echo?"名前: ".$p1->名前。"
"
;
echo?"性別: ".$p1->セックス。"
"
;
echo?"年齢: ".$p1->年齢。"
"
;
?>
プログラムの実行結果:
プライベート属性の値を直接設定する場合、この __set() メソッドが自動的に呼び出され、プライベート属性
に値が割り当てられます。
プライベート属性の値を直接設定する場合、この __set() メソッドが自動的に呼び出され、プライベート属性 に値が割り当てられます。
プライベート属性の値を直接設定する場合、__set() メソッドが自動的に呼び出され、プライベート属性 に値が割り当てられます。
プライベート属性値を設定する場合、この __get() メソッドが自動的に呼び出されます
名前: Zhang San
プライベート属性値を直接取得する場合、この __get()method
性別: 男性
private 属性値を直接取得する場合に自動的に呼び出されます__get() メソッド
年齢: 20
上記のコードで __get() メソッドと __set() メソッドが追加されていない場合、プログラムは失敗します。クラスのプライベート メンバーに対する外部操作では使用できません。また、上記のコードは、__get() および __set() メソッド カプセル化されたプライベート メンバーへの直接アクセス。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。