復制代碼 代碼如下:
 
<?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; 
else 
return $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>"; 
} 
?> 
| 
 
 | 
新聞熱點
疑難解答