実際のアプリケーションではクラスの属性がprivateに設定されていることが多く、その属性にアクセスする必要がある場合に面倒になります。プロパティへのアクセスはメソッドとして実装できますが、PHP にはそのような操作を容易にする特別なメソッドがいくつか用意されています。
__set() メソッドは、プライベート属性値を設定するために使用されます:
function __set($property_name, $value){ $this->$property_name = $value; }
クラス内で __set() メソッドを使用した後、 $p1->name = "Zhang San"; を使用する場合オブジェクトのプライベート プロパティの値を設定すると、__set() メソッドが自動的に呼び出され、プライベート プロパティの値が設定されます。
__get() メソッドはプライベート属性値を取得するために使用されます:
function __set($property_name, $value){ return isset($this->$property_name) ? $this->$property_name : null;}
例:
<?phpclass Person { private $name; private $sex; private $age; //__set()方法用来设置私有属性 function __set($property_name, $value) { echo "在直接设置私有属性值的时候,自动调用了这个 __set() 方法为私有属性赋值<br />"; $this->$property_name = $value; } //__get()方法用来获取私有属性 function __get($property_name) { echo "在直接获取私有属性值的时候,自动调用了这个 __get() 方法<br />"; return isset($this->$property_name) ? $this->$property_name : null; }}$p1=new Person();//直接为私有属性赋值的操作, 会自动调用 __set() 方法进行赋值$p1->name = "张三";//直接获取私有属性的值, 会自动调用 __get() 方法,返回成员属性的值echo "我的名字叫:".$p1->name; ?>
サンプルを実行し、出力:
在直接设置私有属性值的时候,自动调用了这个 __set() 方法为私有属性赋值在直接获取私有属性值的时候,自动调用了这个 __get() 方法我的名字叫:张三
__isset() メソッドは検出に使用されますprivate 属性値が設定されているかどうか。
オブジェクト内のメンバーがパブリックの場合は、 isset() 関数を直接使用できます。プライベート メンバー属性の場合は、クラスに __isset() メソッドを追加する必要があります:
private function __isset($property_name){ return isset($this->$property_name);}
このようにして、 isset() 関数がクラスの外部で使用され、オブジェクト内のプライベート メンバーが設定されているかどうかを判断します。を検出すると、__isset() メソッドが自動的に呼び出され、検出されます。
__unset() メソッドは、プライベート属性を削除するために使用されます。
isset() 関数と同様に、unset() 関数はオブジェクトのパブリック メンバー属性のみを削除できます。オブジェクト内のプライベート メンバー属性を削除したい場合は、 __unset() メソッドを使用する必要があります。
private function __unset($property_name){ unset($this->$property_name);}
__set() プライベート プロパティ値を設定するために使用されるメソッド。
__set()
function __set($property_name, $value){ $this->$property_name = $value; }
__get()
function __set($property_name, $value){ return isset($this->$property_name) ? $this->$property_name : null;}
<?phpclass Person { private $name; private $sex; private $age; //__set()方法用来设置私有属性 function __set($property_name, $value) { echo "在直接设置私有属性值的时候,自动调用了这个 __set() 方法为私有属性赋值<br />"; $this->$property_name = $value; } //__get()方法用来获取私有属性 function __get($property_name) { echo "在直接获取私有属性值的时候,自动调用了这个 __get() 方法<br />"; return isset($this->$property_name) ? $this->$property_name : null; }}$p1=new Person();//直接为私有属性赋值的操作, 会自动调用 __set() 方法进行赋值$p1->name = "张三";//直接获取私有属性的值, 会自动调用 __get() 方法,返回成员属性的值echo "我的名字叫:".$p1->name; ?>
在直接设置私有属性值的时候,自动调用了这个 __set() 方法为私有属性赋值在直接获取私有属性值的时候,自动调用了这个 __get() 方法我的名字叫:张三
オブジェクト内のメンバーがパブリックの場合は、 isset() 関数を直接使用できます。プライベート メンバー属性の場合は、クラスに __isset() メソッドを追加する必要があります:
private function __isset($property_name){ return isset($this->$property_name);}
__unset()
isset() 関数と同様に、unset() 関数はオブジェクトのパブリック メンバー属性のみを削除できます。オブジェクト内のプライベート メンバー属性を削除したい場合は、 __unset() メソッドを使用する必要があります。れーれー