關於php面向的特性之封裝

餘二五發表於2017-11-08
物件導向的封裝特性  

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);
本文轉自 hgditren 51CTO部落格,原文連結:http://blog.51cto.com/phpme/840557,如需轉載請自行聯絡原作者


相關文章