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