オブジェクトのいくつかの属性を設定したい場合は、オブジェクトのプロセッサ関数 __get() と __set() を使用できます。ただし、使用するための前提条件があります。これら 2 つのメソッドは、次の例のように、属性が保護またはプライベートである必要があるということです。
コードは次のとおりです
| コードをコピー
|
クラス人
{
プライベート $__data = array();
パブリック関数 __get($property)
{
if (isset($this->__data[$property]))
{
$this->__data[$property]; を返します
}
それ以外
{
false を返します;
}
}
パブリック関数 __set($property, $value)
{
$this->__data[$property] = $value;
}
}
|
__set() メソッドと __get() メソッドは保護属性またはプライベート属性用であるため、外部から属性に直接アクセスすることはできませんが、パブリックに定義された __set() メソッドと __get() メソッドを通じて簡単にアクセスできます。同時に、これら 2 つのメソッドは、属性の操作においてより多用途であり、$__data 配列に属する属性のみを設定できるため、外部が属性を直接設定できないようにすることもできます。ただし、__set() と __get() の使用にはいくつかの欠点もあります。まず、これら 2 つのメソッドはプライベート属性または保護された属性、つまり外部にアクセス権を持たない属性のみをキャプチャするため、PHP は致命的なエラーを報告します。次に、これら 2 つのメソッドは属性の継承を破壊します。親オブジェクトに __set() メソッドがあり、その独自の __get() メソッドがサブクラスに実装されている場合、親オブジェクトの __get() メソッドを調整することはできないため、オブジェクトは正常に実行されません。 __get() メソッドは呼び出されないため、オーバーライドされた属性が存在するかどうかを検出する場合に取得されます。誰かが __isset() と __unset() を実装することで上記の問題を解決しているのを見ました。コードは次のとおりです:
コードは次のとおりです
| コードをコピー
|
パブリック関数 __isset($property)
{
if (isset($this->data[$property]))
{
true を返します;
}
それ以外
{
false を返します;
}
}
パブリック関数 __unset($property)
{
if (isset($this->data[$property]))
{
return unset($this->data[$property]);
}
それ以外
{
false を返します;
}
}
|
__isset() と __unset() を使用すると、属性が実際に存在するかどうかを確認できますが、これら 2 つのメソッドは PHP5.1 以降でのみ有効です。
http://www.bkjia.com/PHPjc/628952.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/628952.html技術記事オブジェクトのいくつかの属性を設定する場合、これら 2 つのメソッドを使用する前に、オブジェクトのプロセッサ関数 __get() と __set() を使用できます。 ..