Wie läuft der Vorgang von __set() ab?
葫芦娃平衡盘
葫芦娃平衡盘 2017-08-11 22:04:09
0
2
1300

Klassenkuppel{
private $age;
öffentliche Funktion __construct($age){

$this->age =$age;
}
öffentliche Funktion __set($name,$value){

if($name =='Alter')
                                                                                                                                                                                                                            {return false; >Alter=25;und
                                                                                                                ..,,                                          In beiden Fällen sollten die Ausgabeergebnisse der Standardwert 24 sein, aber das Ergebnis von

echo $obj-> age=25 ist 25. Alter wurde geändert? $obj->age Das ist kein Problem mit dem Satz?

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

Antworte allen(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;

你这个代码,第二个echo应该是不能执行的,你代码没贴全吧,因为他会提示你不能访问私有属性

两个输出结果的差异是因为你echo的写法,echo a = 3 这种写法会执行赋值语句,但不管赋值成不成功,会把等号右边的数输出到屏幕上

1、第一个echo $obj->age=25;执行了你的set方法,得到name是等于age的,执行return false ,所以没有修改属性age的值。 但你这种写法,他会输出你等号右边的25在屏幕上 ;

2、第二个就是正常一般的写法,会执行这个赋值语句,然后判断返回false,不修改age的值,然后输出你的age属性的值还是24


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;
    }


Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage