検索

ホームページ  >  に質問  >  本文

__set()の演算処理はどのようなものですか?

クラス ドーム{
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; この文は問題ありません。意味は異なりますか?

葫芦娃平衡盘葫芦娃平衡盘2699日前1301

全員に返信(2)返信します

  • DayDayUp

    DayDayUp2017-08-12 16:38:41

    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

    DayDayUp2017-08-12 16:00:34

    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
  • キャンセル返事