PHP の特殊メソッド __set()、__get()、__isset() および __unset()
実際のアプリケーションではクラスの属性が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() メソッドは、プライベート属性値が設定されているかどうかを検出するために使用されます。
オブジェクト内のメンバーがパブリックである場合は、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);}
実際のアプリケーションではクラスの属性が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);}