当前位置:Gxlcms > PHP教程 > $this->$propertyName=$value,$this->propertyName=$value的区别?

$this->$propertyName=$value,$this->propertyName=$value的区别?

时间:2021-07-01 10:21:17 帮助过:1人阅读

在通过__set($propertyName,$value)设置private成员属性时,
用$this->$propertyName = $value的写法才可以进行private变量值的修改,
采用$this->propertyName = $value的写法则不能进行变量值的修改。

完整代码:

class BasePerson{

   private $name;
   private $age;
   private $average;
   function __construct(){
       $num_args = func_num_args();
       if($num_args == 1){
           $this->name = func_get_arg(0);
       } elseif($num_args == 2){
           $this->name = func_get_arg(0);
           $this->age = func_get_arg(1);
       } elseif($num_args == 3){
           $this->name = func_get_arg(0);
           $this->age = func_get_arg(1);
           $this->average = func_get_arg(2);
       }
   }
   
   private function __set($propertyName,$propertyValue){
       echo "
BasePerson __set()"; if($propertyName == "name"){ if($propertyValue == "zhangsan" || $propertyValue == "wangwu"){ $this->$propertyName = $propertyValue; } } elseif($propertyName=="age"){ if($propertyValue >150 || $propertyValue <0){ return ; } } $this->$propertyName = $propertyValue; } function __toString(){ return "
name:".($this->name)."
age:".($this->age)."
average".($this->average); }

}

回复内容:

在通过__set($propertyName,$value)设置private成员属性时,
用$this->$propertyName = $value的写法才可以进行private变量值的修改,
采用$this->propertyName = $value的写法则不能进行变量值的修改。

完整代码:

class BasePerson{

   private $name;
   private $age;
   private $average;
   function __construct(){
       $num_args = func_num_args();
       if($num_args == 1){
           $this->name = func_get_arg(0);
       } elseif($num_args == 2){
           $this->name = func_get_arg(0);
           $this->age = func_get_arg(1);
       } elseif($num_args == 3){
           $this->name = func_get_arg(0);
           $this->age = func_get_arg(1);
           $this->average = func_get_arg(2);
       }
   }
   
   private function __set($propertyName,$propertyValue){
       echo "
BasePerson __set()"; if($propertyName == "name"){ if($propertyValue == "zhangsan" || $propertyValue == "wangwu"){ $this->$propertyName = $propertyValue; } } elseif($propertyName=="age"){ if($propertyValue >150 || $propertyValue <0){ return ; } } $this->$propertyName = $propertyValue; } function __toString(){ return "
name:".($this->name)."
age:".($this->age)."
average".($this->average); }

}

$name = 'test';
$$name = '123';
var_dump($test);  //
输出123 //希望你能理解 //同理 $this->$proertyName //需要看$proertyName的值, 是设置$proertyName的值这个属性 $proertyName = 'age'; $this->$proertyName = '12'; var_dump($this->age); //输出12 $this->proertyName //设置的是proertyName这个属性

楼主,$this->$propertyName = $value 这样的赋值是$this实例中变量为$propertyName变量的值,此处的$propertyName仍然是个变量,而$this->propertyName就是$this的属性了;

前者的情况是这样的,例如$propertyName = 'enable';
那么$this->$propertyName 就等同与 $this->enable;

人气教程排行