生活随笔
收集整理的這篇文章主要介紹了
oop三大特性--封装性
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
http://www.cnblogs.com/zizhuyuan/archive/2011/06/13/2079905.html
/** 封裝性:面向對象三大特性之一** 1.就是把對象的成員(屬性,方法)結合成一個獨立的相同單位,并盡可能隱藏對象的內部細節* 訪問權限修飾符 public protected private* private:私有的,用這個關鍵字修飾的成員,只能在對象內部訪問(只有用$this訪問)* * 屬性可以封裝:* 只要一個變量,需要在多個方法使用,就將這個變量聲明為成員屬性,可以直接在這個對象中的所有方法中使用** 成員屬性,相當于這個對象中的全局變量** 成員屬性都會在方法中使用,成員屬性值的變化其實就是在改變方法的執行行為,也就是改變了對象的功能** 成員屬性的值如果不正常,方法執行的功能葉就不正常 * * 作用:不需要在對象外部改變或讀取它的值* 1.封裝* 再提供一個公有的方法(經過方法對對象成員屬性進行賦值和取值就可以控制)*** 方法也可以封裝** 作用:* 1.使用private修飾使其只能在內部使用** 2.一個類中有100個方法,封裝了95個(為另外5個服務的方法),只有5個方法可以使用** 100個成員屬性,都讓取值,不可以改值;或者只可改值,不可獲取值//此種情況下使用以下方法比較方便 * 和封裝有關的魔術方法:** __set();//是直接設置[私有的]成員屬性值時,自動調用的方法* __get();//是直接獲取[私有的]成員屬性值時,自動調用的方法* __isset();//是直接使用isset()查看對象中私有屬性是否存在時,自動調用這個方法* __unset();//是直接使用unset()刪除對象中私有屬性時,自動調用的方法********/
class Person{//x封裝成員屬性,不需要在對象外部改變private $name;private $age;private $sex;private __unset($proName){unset($this->$proName);}//是直接查看對象中私有屬性是否存在時,自動調用這個方法//__isset($proName)的使用,$proName代表屬性名private function __isset($proName){return isset($this->$proName);//isset()返回是否存在}function __construct($name,$age,$sex){$this->name=$name;$this->age=$age;$this->sex=$sex;}//當獲取私有的成員屬性時,自動調用此方法private function __get($proName){//控制所獲取的值if($proName=="age"){if($this-age>40)return $this->age-10;}return $this->$proName;}//當設置私有的成員屬性時,自動調用此方法private function __set($proName,$proValue){//$proName表示成員屬性名,$proValue表示成員屬性值//控制設置范圍if($proName=="age"){if($proValue > 100 || $proValue<0)return;}$this->$proName=$proValue;}//提供公有方法來設置成員屬性的值function setAge($age){//控制年齡范圍,增加安全性if($age > 100 || $age < 0 )return;$this->age=$age;}//提供公有方法來獲取成員屬性的值function getAge(){//控制獲取年齡的范圍if($this->age < 30)return $this->age;else if($this->age<40)return $this->age-5;else if($this->age<50)return $this->age;elsereturn $this->age-15;
提供公有方法來 }function say(){echo "我的名字:{$this->name},我的年齡:{$this->age},我的姓別:{$this->sex}<br>";//訪問封裝過的 run()方法$this-run();}private function run(){echo '111111111111<br>'}function eat(){}//析構方法function __destruct(){}}$p1=new Person("zhangsan",25,"男");
$p2=new Person;
$p3=new Person;
//$p1->age=-50;//因為年齡在外部隨意訪問,所以成員屬性藥封裝,才有安全性。
$p1->setAge(30);//通過方法來設置成員屬性德值
$p1->getAge();//通過方法來獲取成員屬性德值//通過添加家魔術方法__set($proName,$proValue) __get($proName),就可以直接調用成員屬性了$p1->say();//可以調用
$p1->run();//私有的方法不能直接調用//刪除$p1里面的name
unset($p1->name);//判斷name是否存在
if(isset($p1->name)){echo "存在<br>";
}else{echo "沒有這個成員 <br>";
}
總結
以上是生活随笔為你收集整理的oop三大特性--封装性的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。