__set()の演算処理はどのようなものですか?
葫芦娃平衡盘
葫芦娃平衡盘 2017-08-11 22:04:09
0
2
1223

クラス ドーム{
private $age;
public function __construct($age){

$this->age =$age;
}
public function __set ($name,$value){

if($name =='age')
{return false;}

return $this->$name= $value;
}

}

$obj =新しいドーム(24);

echo $obj->age=25;and
$ obj-> age = 26;
$ obj-> age = 26;;どちらの場合も、出力の結果はデフォルト値24でなければなりませんが、

echo $の結果ですobj->age=25 は 25 です。年齢は変更されました? $obj->age=26; echo $obj-> ;age; この文は問題ありません。意味は異なりますか?

葫芦娃平衡盘
葫芦娃平衡盘

全員に返信 (2)
DayDayUp
class demo{ private $age; public function __construct($age){ $this->age =$age; } public function __set($name,$value){ if($name =='age'){ return false; } return $this->$name=$value; } } $obj =new demo(24); echo $obj->age=25; $obj->age=26; echo $obj->age;

コードでは、プライベート プロパティにアクセスできないというメッセージが表示されるため、2 番目のエコーを実行しないでください。

2 つの出力結果の違いは、記述方法にあります。 echo, echo a = 3 この書き方だと代入文が実行されますが、代入が成功したかどうかに関係なく、等号の右側の数字が画面に出力されます

1つ目のecho $obj-1。 >age=25; は set メソッドを実行し、 name が age と等しいことが取得され、 return false が実行されるため、属性 age の値は変更されません。 しかし、あなたの書き方では、画面上の等号の右側に 25 が出力されます

2 2 番目の方法は、代入ステートメントを実行して false を返す通常の書き方です。 、年齢の値を変更せずに、年齢属性の値が 24 のまま出力されます


いいねを押す+1
  • 返事 わかりました、ありがとうございます
    葫芦娃平衡盘 著者 2017-08-12 18:18:18
DayDayUp

echo $obj->age=25 このステートメントは間違っています。クラスの値を変更していません。値 25 を出力しただけです。

1. set メソッドを見てください。 else ステートメントが欠落しているようです

2. プライベート属性を読みたい場合は、別の get メソッドを記述する必要があります

if($name =='age') {return false;} //没有else return $this->$name=$value; } } //正确代码 public function __set($name,$value){ if($name == 'age'){ echo 'age不允许修改'; }else{ return $this->$name = $value; } } public function __Get($name){ return $this->$name; }


いいねを押す+0
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート
    私たちについて 免責事項 Sitemap
    PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!