function __unset() 与function __isset() 一起用出现的怪问题?

<?php
class member {
        private $name;
        protected $sex;
        public $age;
        private $mb;
        
        public function __construct($name='',$sex='',$age='',$mb=''){
            $this->name=$name;
            $this->sex=$sex;
            $this->age=$age;
            $this->mb=$mb;
        }
        
        public function __unset($propertyName){
            unset($this->$propertyName);
        }
        
        public function __isset($propertyName){
            if(isset($this->$propertyName)){
                echo '变量存在。';
            }
            else{
                echo '变量不存在。';
            }
        }
        
    }


$p1=new member;
unset($p1->name);
isset($p1->name);
?>


/**********************************************************************************************************************/
上面的运行结果是:
变量不存在。变量不存在。
/**********************************************************************************************************************/


想了几天也想不明白为什么这里会执行了2次,显示了2次“变量不存在。” 用我的理解,理论上应该是会执行 echo '变量存在。'; 1次的。我这里的是PHP5.35
在线求解答:::

作者: unx2011   发布时间: 2011-10-18

   public function __isset($propertyName){
            if(isset($this->$propertyName)){//把这里的isset去掉就正常了。              
  echo '变量存在。';
            }
            else{
                echo '变量不存在。';
            }
        }

作者: 白老师   发布时间: 2011-10-18

去掉isset 会出Notice: Undefined property: member::$name

---------------------------------------------------------------------------------------------------------

作者: unx2011   发布时间: 2011-10-18

public function __isset($propertyName){
            if(isset($this->$propertyName)){ //这里有isset 应该没有问题,但是与外面的unset()一起用,当变量给删除时就会出现2次的问题
                echo '变量存在。';
            }
            else{
                echo '变量不存在。';
            }
        }

作者: unx2011   发布时间: 2011-10-18

<?php
class member {
        private $name;
        protected $sex;
        public $age;
        private $mb;
        
        public function __construct($name='',$sex='',$age='',$mb=''){
            $this->name=$name;
            $this->sex=$sex;
            $this->age=$age;
            $this->mb=$mb;
        }
        
        public function __unset($propertyName){ //当类外部使用unset()时自动执行这个方法。
            unset($this->$propertyName);
        }
        
        public function __isset($propertyName){//当类外部使用isset()时自动执行__isset(){内的内容}
            if(isset($this->$propertyName)){//判断if(内的检测结果){检测结果为FALSE,执行这里}
                echo '变量存在。<br>'; //
            }
            else{
                echo '变量不存在。<br>';
            }
        }
        
    }

$p1=new member; //实例化一个对像$p1
unset($p1->name);//调用类内的__unset() 方法来 销毁对像$p1内的成员属性$name
isset($p1->name);//调用类内的__isset() 方法来 检测对像$p1内的成员属性$name是否存在。(结果这里显示了2次不存在)
isset($p1->mb)//检测$p1内成员$mb
?>
描述:代码
图片:A.jpg
'700')this.width='700';if(this.offsetHeight>'700')this.height='700';" title="Click Here To EnLarge">
描述:运行结果
图片:B.jpg
=700) window.open('http://bbs.lampbrother.net/attachment/Mon_1110/179_65818_b7d81344ef17c3a.jpg');" onload="if(this.offsetWidth>'700')this.width='700';if(this.offsetHeight>'700')this.height='700';" >

作者: unx2011   发布时间: 2011-10-18