PHP では、__set() メソッドを使用してプライベート メンバー プロパティの値を設定できます。このメソッドは、未定義のプロパティに値を割り当てるときにトリガーされます。構文形式は「__set($property, $value)" には 2 つのパラメーターがあり、最初のパラメーターは属性名を指定し、2 番目のパラメーターは属性に設定される値で、戻り値はありません。
推奨: 「PHP ビデオ チュートリアル 」
一般的に、クラスの属性は常に private として定義します。これはより現実的なロジックに沿ったものです。ただし、属性の読み取りと代入の操作は非常に頻繁に行われるため、PHP5 では、属性を取得および代入するための 2 つの関数「__get()」と「__set()」があらかじめ定義されています。
#__set() メソッドは、プライベート プロパティ値を設定するために使用されます。
#__get() メソッドは、プライベート プロパティ値を取得するために使用されます。
PHP5 では、属性の値を設定および取得するための特別なメソッド「__set()」と「__get()」が提供されていますが、この 2 つのメソッドは存在しません。デフォルトではこれをクラスに追加します。コンストラクター メソッド (__construct()) と同様に、クラスに追加された場合にのみ存在します。これら 2 つのメソッドは次のように追加できます。もちろん、独自の個人的なスタイルを追加します:
//__set()方法用来设置私有属性 public function __set($name,$value){ $this->$name = $value; } //__get()方法用来获取私有属性 public function __get($name){ return $this->$name; }
__get() メソッド: このメソッドは、プライベート メンバー属性の値を取得するために使用されます。パラメーターがあります。パラメーターは、必要なメンバー属性の名前で渡されます。を取得すると、取得された属性値が返されます。このメソッドをプライベート メソッドにすることもできるため、このメソッドを手動で呼び出す必要はありません。これは、プライベート属性が直接取得されたときにオブジェクトによって自動的に呼び出されます。 private プロパティはカプセル化されているため、値を直接取得することはできませんが、このメソッドをクラスに追加すると、「echo$p1->name」などの文を使用したときに自動的に値を直接取得できるようになります。 __get($name) メソッドを使用し、属性名をパラメーター $name に渡します。このメソッドの内部実行を通じて、渡したプライベート属性の値が返されます。メンバーのプロパティがプライベートとしてカプセル化されていない場合、オブジェクト自体はこのメソッドを自動的に呼び出しません。
__set( $property, $value ) メソッド: このメソッドは、プライベート メンバー プロパティの値を設定するために使用されます。これには 2 つのパラメーターがあります。最初のパラメーターは、値を設定するプロパティの名前です。 for、および第 2 パラメータ パラメータはプロパティに設定する値であり、戻り値はありません。このメソッドも手動で呼び出す必要はありません。プライベートにすることもできます。プライベート属性値を直接設定するときに自動的に呼び出されます。同じプライベート属性はカプセル化されています。__set() メソッドがない場合は、Not です。例: $this->name='zhangsan' の場合はエラーになりますが、クラスに __set($property_name, $value) メソッドを追加すると、値をプライベート プロパティに直接代入するときに、 $property_nameにnameなどの属性を渡し、$valueに代入する値「zhangsan」を渡すと自動的に呼び出され、このメソッドを実行することで代入の目的が達成されます。メンバーのプロパティがプライベートとしてカプセル化されていない場合、オブジェクト自体はこのメソッドを自動的に呼び出しません。不正な値を渡さないように、このメソッドで判定することもできます。コードは次のとおりです。
<?php class Person { //下面是人的成员属性,都是封装的私有成员 private $name; //人的名子 private $sex; //人的性别 private $age; //人的年龄 //__get()方法用来获取私有属性 private function __get($property_name) { echo "在直接获取私有属性值的时候,自动调用了这个__get()方法<br>"; if(isset($this->$property_name)) { return($this->$property_name); } else { return(NULL); } } //__set()方法用来设置私有属性 private function __set($property_name, $value) { echo "在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值<br>"; $this->$property_name = $value; } } $p1=newPerson(); //直接为私有属性赋值的操作,会自动调用__set()方法进行赋值 $p1->name="张三"; $p1->sex="男"; $p1->age=20; //直接获取私有属性的值,会自动调用__get()方法,返回成员属性的值 echo "姓名:".$p1->name."<br>"; echo "性别:".$p1->sex."<br>"; echo "年龄:".$p1->age."<br>"; ?>
プログラムの実行結果:
在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值 在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值 在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值 在直接获取私有属性值的时候,自动调用了这个__get()方法 姓名:张三 在直接获取私有属性值的时候,自动调用了这个__get()方法 性别:男 在直接获取私有属性值的时候,自动调用了这个__get()方法 年龄:20
上記のコードで__get()メソッドと__set()メソッドが追加されていない場合、プログラムは動作できないためエラーになります。上記のコードは、__get() メソッドと __set() メソッドを自動的に呼び出すことで、カプセル化されたプライベート メンバーに直接アクセスするのに役立ちます。
プログラミング関連の知識について詳しくは、プログラミング入門をご覧ください。 !
以上がphp __set()メソッドの使い方は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。