簡介:這是php學習筆記------[php中物件導向三大特性之一[封裝性]的應用]的詳細頁面,介紹了和php,有關的知識、技巧、經驗,和一些php源碼等。
class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=338320' scrolling='no'>
<?php/* * 封裝性:物件導向三大特性之一 * * 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裡面的nameunset($p1->name);//判斷name是否存在if(isset($p1->name)){echo "存在<br>";}else{echo "沒有這個成員 <br>";}?>
愛J2EE關注Java邁克爾傑克遜視頻站JSON線上工具
http://biancheng.dnbcw.info/php/338320.html pageNo:9