Rumah > Soal Jawab > teks badan
kubah kelas{
peribadi $umur;
fungsi awam __bina($umur){
$ini->umur =$umur;
}
fungsi awam __set($nama,$nilai){
jika($nama =='umur')
… =25;dan
..,, . umur=25 ialah 25. Umur telah diubah suai? $obj->umur=26;
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;
Dalam kod anda, gema kedua tidak seharusnya dilaksanakan Anda tidak menyiarkan keseluruhan kod, kerana ia akan menggesa anda bahawa anda tidak boleh mengakses sifat peribadi
Perbezaan antara kedua-dua hasil keluaran adalah kerana cara anda menulis. echo, echo a = 3 Cara penulisan ini akan melaksanakan pernyataan tugasan, tetapi tidak kira sama ada tugasan itu berjaya, nombor di sebelah kanan tanda sama akan dikeluarkan ke skrin
1 Gema pertama $obj-. >age=25; melaksanakan kaedah set anda, didapati bahawa nama adalah sama dengan umur, dan return false dilaksanakan, jadi nilai umur atribut tidak diubah suai. Tetapi dengan cara penulisan anda, ia akan mengeluarkan 25 di sebelah kanan tanda sama anda pada skrin
2 Cara kedua ialah cara penulisan biasa, yang akan melaksanakan pernyataan tugasan, kemudian menilai dan mengembalikan palsu , tanpa mengubah suai nilai umur, dan kemudian Output nilai atribut umur anda masih 24
DayDayUp2017-08-12 16:00:34
echo $obj->age=25 Pernyataan ini salah Anda tidak menukar nilai dalam kelas Anda hanya mengeluarkan nilai 25.
1 Perlu ada sesuatu yang salah dalam kaedah anda penyataan lain, nampaknya tiada
2 Jika anda ingin membaca atribut peribadi, anda perlu menulis kaedah dapatkan yang lain
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; }