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

查看:92
本文介绍了php - $this->$propertyName = $value,$this->propertyName = $value的区别?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

在通过__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 "</br>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 "</br>name:".($this->name)."</br>age:".($this->age)."</br>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这个属性

这篇关于php - $this-&gt;$propertyName = $value,$this-&gt;propertyName = $value的区别?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆