php學(xué)習(xí)筆記 php中面向?qū)ο笕筇匦灾籟封裝性]的應(yīng)用
更新時(shí)間:2011年06月13日 23:22:48 作者:
就是把對(duì)象的成員(屬性,方法)結(jié)合成一個(gè)獨(dú)立的相同單位,并盡可能隱藏對(duì)象的內(nèi)部細(xì)節(jié)
復(fù)制代碼 代碼如下:
<?php
/*
* 封裝性:面向?qū)ο笕筇匦灾?
*
* 1.就是把對(duì)象的成員(屬性,方法)結(jié)合成一個(gè)獨(dú)立的相同單位,并盡可能隱藏對(duì)象的內(nèi)部細(xì)節(jié)
* 訪問(wèn)權(quán)限修飾符 public protected private
* private:私有的,用這個(gè)關(guān)鍵字修飾的成員,只能在對(duì)象內(nèi)部訪問(wèn)(只有用$this訪問(wèn))
*
* 屬性可以封裝:
* 只要一個(gè)變量,需要在多個(gè)方法使用,就將這個(gè)變量聲明為成員屬性,可以直接在這個(gè)對(duì)象中的所有方法中使用
*
* 成員屬性,相當(dāng)于這個(gè)對(duì)象中的全局變量
*
* 成員屬性都會(huì)在方法中使用,成員屬性值的變化其實(shí)就是在改變方法的執(zhí)行行為,也就是改變了對(duì)象的功能
*
* 成員屬性的值如果不正常,方法執(zhí)行的功能葉就不正常
*
* 作用:不需要在對(duì)象外部改變或讀取它的值
* 1.封裝
* 再提供一個(gè)公有的方法(經(jīng)過(guò)方法對(duì)對(duì)象成員屬性進(jìn)行賦值和取值就可以控制)
*
*
* 方法也可以封裝
*
* 作用:
* 1.使用private修飾使其只能在內(nèi)部使用
*
* 2.一個(gè)類中有100個(gè)方法,封裝了95個(gè)(為另外5個(gè)服務(wù)的方法),只有5個(gè)方法可以使用
*
* 100個(gè)成員屬性,都讓取值,不可以改值;或者只可改值,不可獲取值//此種情況下使用以下方法比較方便
* 和封裝有關(guān)的魔術(shù)方法:
*
* __set();//是直接設(shè)置[私有的]成員屬性值時(shí),自動(dòng)調(diào)用的方法
* __get();//是直接獲取[私有的]成員屬性值時(shí),自動(dòng)調(diào)用的方法
* __isset();//是直接使用isset()查看對(duì)象中私有屬性是否存在時(shí),自動(dòng)調(diào)用這個(gè)方法
* __unset();//是直接使用unset()刪除對(duì)象中私有屬性時(shí),自動(dòng)調(diào)用的方法
*
*
*
*
*
*
*
*/
class Person{
//x封裝成員屬性,不需要在對(duì)象外部改變
private $name;
private $age;
private $sex;
private __unset($proName){
unset($this->$proName);
}
//是直接查看對(duì)象中私有屬性是否存在時(shí),自動(dòng)調(diào)用這個(gè)方法
//__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;
}
//當(dāng)獲取私有的成員屬性時(shí),自動(dòng)調(diào)用此方法
private function __get($proName)
{
//控制所獲取的值
if($proName=="age"){
if($this-age>40)
return $this->age-10;
}
return $this->$proName;
}
//當(dāng)設(shè)置私有的成員屬性時(shí),自動(dòng)調(diào)用此方法
private function __set($proName,$proValue){
//$proName表示成員屬性名,$proValue表示成員屬性值
//控制設(shè)置范圍
if($proName=="age"){
if($proValue > 100 || $proValue<0)
return;
}
$this->$proName=$proValue;
}
//提供公有方法來(lái)設(shè)置成員屬性的值
function setAge($age){
//控制年齡范圍,增加安全性
if($age > 100 || $age < 0 )
return;
$this->age=$age;
}
//提供公有方法來(lái)獲取成員屬性的值
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;
提供公有方法來(lái) }
function say(){
echo "我的名字:{$this->name},我的年齡:{$this->age},我的姓別:{$this->sex}<br>";
//訪問(wèn)封裝過(guò)的 run()方法
$this-run();
}
private function run(){
echo '111111111111<br>'
}
function eat(){
}
//析構(gòu)方法
function __destruct(){
}
}
$p1=new Person("zhangsan",25,"男");
$p2=new Person;
$p3=new Person;
//$p1->age=-50;//因?yàn)槟挲g在外部隨意訪問(wèn),所以成員屬性藥封裝,才有安全性。
$p1->setAge(30);//通過(guò)方法來(lái)設(shè)置成員屬性德值
$p1->getAge();//通過(guò)方法來(lái)獲取成員屬性德值
//通過(guò)添加家魔術(shù)方法__set($proName,$proValue) __get($proName),就可以直接調(diào)用成員屬性了
$p1->say();//可以調(diào)用
$p1->run();//私有的方法不能直接調(diào)用
//刪除$p1里面的name
unset($p1->name);
//判斷name是否存在
if(isset($p1->name)){
echo "存在<br>";
}else{
echo "沒(méi)有這個(gè)成員 <br>";
}
?>
作者:代號(hào)極光
出處:http://zizhuyuan.cnblogs.com
您可能感興趣的文章:
- PHP入門(mén)教程之面向?qū)ο蟮奶匦苑治?繼承,多態(tài),接口,抽象類,抽象方法等)
- javascript面向?qū)ο蟪绦蛟O(shè)計(jì)高級(jí)特性經(jīng)典教程(值得收藏)
- C# 面向?qū)ο笕筇匦裕悍庋b、繼承、多態(tài)
- 淺談Lua的面向?qū)ο筇匦?/a>
- 深入理解Android組件間通信機(jī)制對(duì)面向?qū)ο筇匦缘挠绊懺斀?/a>
- 利用javascript的面向?qū)ο蟮奶匦詫?shí)現(xiàn)限制試用期
- Javascript 面向?qū)ο筇匦?/a>
- javascript 的面向?qū)ο筇匦詤⒖?/a>
- 面向?qū)ο笕筇匦缘囊饬x講解

用PHP連mysql和oracle數(shù)據(jù)庫(kù)性能比較
用PHP連mysql和oracle數(shù)據(jù)庫(kù)性能比較...
2006-10-10 
親密接觸PHP之PHP語(yǔ)法學(xué)習(xí)筆記1
親密接觸PHP之PHP語(yǔ)法學(xué)習(xí)筆記1...
2006-12-12 
利用PHP動(dòng)態(tài)生成VRML網(wǎng)頁(yè)
利用PHP動(dòng)態(tài)生成VRML網(wǎng)頁(yè)...
2006-10-10 
在同一窗體中使用PHP來(lái)處理多個(gè)提交任務(wù)
在同一窗體中使用PHP來(lái)處理多個(gè)提交任務(wù)...
2006-10-10