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

クラス ドーム{
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
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート