解决方案 »

  1.   

    为什么我用unset($per1->sex);删除掉类中的sex变量,然后输出是这个变量是保密
    unset($per1->sex); 后 $per1中没有sex这个属性了,当调用display时,会触发__get方法。
    在__get方法中,
    if($propertyName == "sex"){
          return "保密";
    }
    所以会输出保密。如果删除掉unset($per1->name);的name变量,输出的是空。
    这个是把 private $name; 这句删除对吗?
    private $name删除后,会执行__construct() 中的 $this->name = $name; 因为Person没有$name这个属性,所以会调用__set方法,而__set方法中,只有propertyName==sex的处理方法,所以执行完__set后,Person还是没有$name属性。
    display时,因为没有$this->name,所以会调用__get方法。而__get方法对name的处理是返回$this->name。所以为空了。如果想$name不为空,可以在__set方法中加入
            if ($propertyName == 'name'){
                $this->name = '111';            
            }这样就可以输出
    姓名:111
    年龄:23岁
    性别:男
      

  2.   

    unset($per1->sex)
    这样会删除掉$sex变量
    因为类中没有这个变量了,如果你再调用,会执行__get.