__set() の役割:
__set(): アクセスできない属性 (プライベート、保護、存在しない) に値を割り当てる場合、PHP は __set() メソッドを実行します。
__set() の機能は次のとおりであると上で述べました: アクセスできない属性 (private、protected、存在しない) に値を割り当てるとき、PHP は __set() メソッドを実行します。
これはどういう意味ですか?例えば、上記の例を例に挙げてみましょう。サルが好んで食べる桃をバナナに置き換えましたが、ルール上、$food の前のキーワードは保護されており
直接アクセスできませんが、$food に値を代入する必要があります。どうすればよいでしょうか。
<?php class Monkey{ public $name; protected $food; function __construct($name,$food){ $this->name = $name; $this->food = $food; } function sayHello(){ echo '<br/>我是' . $this->name . '我喜欢吃' . $this->food; } //魔术方法 function __get($pro_name){ //先判断$pro_name是否存在 if(isset($this -> $pro_name)){ return $this -> $pro_name; }else{ echo '属性值不存在'; } } function __set($pro_name,$value){ //先判断$pro_name是否存在 if(isset($this -> $pro_name)){ return $this -> $pro_name = $value; }else{ echo '属性值不存在'; } $monkey = new Monkey('猴子' , '桃子') $monkey -> sayHello(); echo '猴子喜欢吃' . $monkey -> food; $monkey -> food = '香蕉'; echo '<br/>'; $monkey -> sayHello();
$food が保護されているため、アクセスは許可されていません。次に、それを実現するには __set() マジック メソッドを使用する必要があります。 __set() メソッドには、それぞれ変数名と変数値を表す 2 つのパラメーターが含まれています。この 2 つのパラメーターは省略できません。
以上がマジックメソッド __set() インスタンスの詳細な説明 (PHP 上級オブジェクト指向チュートリアル)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。