面向对象的封装特性  

Private  Class star{ 
    public $name; 
    private $age; 
    private $weight;    
    
    //构造函数,在类被实例化之后,第一个被自动执行的方法,不需要人工进行手动调用 
    function __struct($name,$age,$weight){          
        $this->name=$name;      
        $this->age=$age;      
        $this->weight=$weight; 
    }    
    
    //当对象访问类的私有属性时,系统会自动调用 
    private function __get($varName){       
        return $this->$varName; 
    }   
    
    //当对象访问类的私有属性,并为私有属性赋值时,系统会自动调用 
    private function __set($varName,$strValue){       
        return $this->$varName=$strValue; 
    }    
    
    //当对象 访问类的私有属性,并使用isset()函数判断对象的私有属性是否存在时,系统自动调用__isset() 
    private function __isset($strName){       
        return isset($this->$strName);  
    }    
    
    //当对象访问类的私有属性,并使用unset()函数销毁对象的私有属性的时候,系统自动调用__unset()魔术方法  
    
    private function __unset($strName){      
        unset($this->$strName);//unset($var)销毁变量时没有返回值  
    }   
}   

$star=new star;  
echo $star->name; //访问对象的公共属性,可以直接访问  
$star->="李小龙"; //可以访问对象的公共属性,并赋值  
isset($star->name); //可以在类的外部直接使用isset()函数判断类的公共属性是否存在  
unset($star->name); //可以再类的外部直接使用unset()函数来对对象的公共属性进行销毁   

/////////////关于私有属性的操作///////////////

//不能在类的外部直接访问类的私有属性  
echo $star->age; //return error 
  

//不能再类的外部直接访问类的私有属性,并为其赋值 
$star->age="30";//return error 


//不能在类的外部直接判断对象的私有属性是否存在    
echo isset($star->weight);  //return error

//不能在类的外部直接销毁类的私有属性  
unset($star->weight); //return error 


//////////////////系统自动调用类的魔术方法访问私有属性,并对私有属性进行操作//////////////////////////  

//对象访问类的私有属性,系统自动调用__get()魔术方法 

echo $star->age;   

//对象访问类的私有属性,并为该私有属性赋值,系统自动调用__set()魔术方法 
$star->weight="65kg";   

//对象访问类的私有属性,并使用isset()函数判断该私有属性是否存在,系统自动调用__isset()魔术方法 
isset($star->age);   

//对象访问类的私有属性,并使用unset()函数销毁该私有属性时,系统自动调用__unset()魔术方法 
unset($star->weight);