作者:燁竹
對面向過程虫给,面向?qū)ο缶幊趟枷氲睦斫?/strong>
面向過程:
以過程為中心,將所要解決問題瞧筛,分解成一步一步的,再使用函數(shù)進(jìn)行封裝导盅,封裝之后再按過程上的步驟進(jìn)行依次調(diào)用
面向?qū)ο螅?br> 是功能進(jìn)行劃分较幌,將不同的功能劃分不同的主體上,再調(diào)用相應(yīng)主體上的動(dòng)作(功能)
類與對象
類:從眾多事物中提取共性(共同的特點(diǎn)),形成一個(gè)具有描述性的概念
對象:對象就是類中一個(gè)具體的事物
類語法:class 類名{
//類成員
}
實(shí)例化語法:new 類名【()】;
類可以理解為圖紙白翻,而實(shí)例化則是由類得到一個(gè)實(shí)際的物體的過程
類成員:
類成員是用于描述由類產(chǎn)生的身上所能調(diào)用的屬性與功能乍炉。
類成員以分為以下兩大類:普通類成員、靜態(tài)類成員
普通類成員:屬性滤馍、方法岛琼、常量
靜態(tài)類成員:靜態(tài)屬性、靜態(tài)方法
靜態(tài)方法和實(shí)例化方式的區(qū)分是為了解決模式的問題纪蜒,舉例子:比如說“人”這個(gè)類衷恭,每個(gè)人都有姓名、年齡纯续、性別随珠、身高等,這些屬性就應(yīng)該是非靜態(tài)的猬错,因?yàn)槊總€(gè)人都的這些屬性都不相同窗看;但人在生物學(xué)上屬于哪個(gè)門哪個(gè)綱哪個(gè)目等,這個(gè)屬性是屬于整個(gè)人類倦炒,所以就應(yīng)該是靜態(tài)的——它不依賴與某個(gè)特定的人显沈,不會(huì)有某個(gè)人是“脊椎動(dòng)物門哺乳動(dòng)物綱靈長目”而某個(gè)人卻是“偶蹄目”的
屬性(包括普通和靜態(tài)成員):訪問修飾控制限定符,包含三種:public是公開的逢唤;private私有的拉讯;protected受保護(hù)(可以繼承)
成員方法:【訪問修飾控制限定符】 function 方法名(){
//方法體
}
類常量:const
靜態(tài)方法:static
成員的訪問
public修飾的方法 類外類內(nèi)都可以調(diào)用
private、protected修飾的方法 只能在類內(nèi)使用$this調(diào)用,$this代表對象
常量的訪問:類名::常量名;在類內(nèi)訪問常量需要使用self關(guān)鍵字鳖藕;類內(nèi)的self就代表這個(gè)類魔慷;
訪問靜態(tài)屬性必須加$;不加則為訪問常量
(1)、靜態(tài)屬性不需要實(shí)例化即可調(diào)用著恩。因?yàn)殪o態(tài)屬性存放的位置是在類里院尔,調(diào)用方法為"類名::屬性名";
(2)喉誊、靜態(tài)方法不能調(diào)用非靜態(tài)屬性邀摆;因?yàn)榉庆o態(tài)屬性需要實(shí)例化后,存放在對象里伍茄;
(3)栋盹、靜態(tài)方法可以調(diào)用非靜態(tài)方法,使用 self 關(guān)鍵詞敷矫;php里贞盯,一個(gè)方法被self:: 后音念,它就自動(dòng)轉(zhuǎn)變?yōu)殪o態(tài)方法;
(4)躏敢、調(diào)用類的靜態(tài)函數(shù)時(shí)不會(huì)自動(dòng)調(diào)用類的構(gòu)造函數(shù)
成員訪問相關(guān)函數(shù):
構(gòu)造方法__construct和析構(gòu)方法__desctruct()
簡單理解:造方法是對象創(chuàng)建完成后第一個(gè)被對象自動(dòng)調(diào)用的方法,這是我們在對象中使用構(gòu)造方法的原因整葡。而析構(gòu)方法是對象在銷毀之前最后一個(gè)被對象自動(dòng)調(diào)用的方法件余,這也是我們在對象中使用析構(gòu)方法的原因。所以通常使用構(gòu)造方法完成一些對象的初始化工作遭居,使用析構(gòu)方法完成一些對象在銷毀之前的清理工作啼器。
php中可以使用&符號,將對象默認(rèn)的賦值傳值俱萍,更改為引用傳值
克隆
克隆函數(shù):clone(對象名);
克隆方法__clone()
判斷:instanceof
面向?qū)ο笕筇匦裕悍庋b端壳,繼承,多態(tài)
封裝:計(jì)算機(jī)中的封裝枪蘑,就是對外隱藏內(nèi)部實(shí)現(xiàn)的細(xì)節(jié)损谦,對外僅公開接口,通過public岳颇、private照捡、protected、final话侧、static等關(guān)鍵字栗精。來限制屬性或方法的訪問等級;
封裝并不是一種語法瞻鹏,就書寫一個(gè)類的過程時(shí)悲立,對屬性的一種設(shè)計(jì)思想;
繼承:面向?qū)ο笳Z言最大的一個(gè)功能就繼承新博。繼承表示的是一種能力薪夕。在創(chuàng)建一個(gè)類時(shí),無需添加任何代碼就可以擁有已存在的類的功能叭披。
還可以在不更改現(xiàn)有的類的代碼而進(jìn)行功能的擴(kuò)展寥殖。
語法:
class ClassName extends AnotherClass {
}
parent關(guān)鍵字,主要用于當(dāng)子類中重寫了父類的方法時(shí)涩蜘,又想在子類中調(diào)用父類中被重寫的方法嚼贡,就可以使用parent指向父類
多態(tài):多態(tài)就是多種形態(tài),體現(xiàn)在代碼就是同一個(gè)公開的方法多個(gè)內(nèi)部實(shí)現(xiàn)同诫,簡單理解就是不同對象做一件事得到不同結(jié)果粤策。
兩種特殊的類:一個(gè)類只能被繼承、一個(gè)類只能被實(shí)例化误窖。
抽象類與抽象方法:只能被繼承不能被實(shí)例化(abstract)
abstract class 類名{成員}
抽象方法不能是private修飾叮盘,原因抽象類中的抽象方法就是為了被繼承秩贰,如果聲明為private子類無法使用。
接口:只包含抽象方法與常量的抽象類可以定義為接口
語法:
interface 接口名{
接口成員
}
接口不是類柔吼,只能被類實(shí)現(xiàn)(implements)毒费,
接口雖然不能被類繼承,但是接口可以繼承接口愈魏。
最終類與最終方法:不允許其他的類來修改本類的代碼(final)
語法:
final class 類名{
//類成員
}
重載:
PHP中沒有真正意義的重載;php中的重載指的是對一個(gè)非公開觅玻,或不存在的屬性或方法的一種處理方法。
屬性重載:
__get():沒權(quán)限訪問時(shí)候自動(dòng)調(diào)用( 訪問私有屬性 )
__set(): 無權(quán)操作的屬性賦值時(shí), 或不存在的屬性賦值時(shí), __set()自動(dòng)調(diào)用(方法用來設(shè)置私有屬性)
__isset() : 用isset() 判斷對象不可見的屬性時(shí)(protected/private/不存在的屬性) 會(huì)引發(fā) __isset()來執(zhí)行
方法重載:
__call():作用:在調(diào)用對象中不存在的方法時(shí)培漏,就會(huì)出現(xiàn)系統(tǒng)報(bào)錯(cuò)溪厘,然后退出, 聲明時(shí)候自動(dòng)調(diào)用:就是在調(diào)用一個(gè)對象中不存在的方法時(shí)自動(dòng)調(diào)用(處理一些不存在的方法的錯(cuò)誤調(diào)用牌柄,需要兩個(gè)參數(shù)畸悬,具體的看api)
__callStatic:調(diào)用一個(gè)不存在的靜態(tài)方法的時(shí)候自動(dòng)調(diào)用
__toString():時(shí)機(jī):將一個(gè)對象當(dāng)作字符串輸出的時(shí)候自動(dòng)調(diào)用(直接echo 對象)。必須return
自動(dòng)加載:
__autoload()函數(shù):實(shí)例化對象時(shí)珊佣,自動(dòng)調(diào)用(其它的魔術(shù)方法都是在類中添加起作用蹋宦,這是一個(gè)唯一一個(gè)不在類中添加方法的,只要在頁面中使用掉一個(gè)類彩扔,只要用到這個(gè)類名妆档,就會(huì)自動(dòng)將類名傳給這個(gè)參數(shù))
spl_autoload_register(fun);將我們自己定義的加載函數(shù),注冊到php的自動(dòng)加載機(jī)制中
設(shè)計(jì)模式
所謂的設(shè)計(jì)模式虫碉,就是具有多年開發(fā)經(jīng)驗(yàn)的贾惦,開發(fā)者,在開發(fā)的過程中敦捧,為了解決某個(gè)需求须板,而形成的一套代碼方案
單例模式:就是單一的實(shí)例,一個(gè)類永遠(yuǎn)只能產(chǎn)生一個(gè)實(shí)例
工廠模式:一個(gè)負(fù)責(zé)其他類的實(shí)例化工作
工廠單例模式:并不是工廠類是單例兢卵,而是通過工廠類所創(chuàng)建的其他的類實(shí)現(xiàn)單例
2..png
命名空間:
namespace 空間名\空間名;
use \空間名\空間名
空間成員的訪問
①习瑰、非限定
語法:
空間成員;
說明:
空間成員前什么都不加。
非限定只能訪問當(dāng)前空間中的成員秽荤。
②甜奄、限定
語法:
空間名\空間名\空間成員
說明:
只能訪問當(dāng)前空間的子空間中的成員。
③窃款、完全限定
語法:
\空間名\空間名\空間成員
說明:
可以訪問任意空間中的成員
? 對于空間成員的訪問课兄,掌握以下幾點(diǎn):
? 當(dāng)前空間 所要訪問的空間成員所在的空間
? 當(dāng)前空間與所訪問的空間成員在同一個(gè)空間 直接寫成員名
? 所訪問的空間成員是當(dāng)前空間的子空間 限定
? 訪問其他空間的成員 完全限
數(shù)據(jù)保存:
程序語言中數(shù)據(jù)劃分多種類型,數(shù)據(jù)有兩種方面組成晨继,其一是數(shù)據(jù)的值烟阐,其后是數(shù)據(jù)的類型。
程序在運(yùn)行的過程中,數(shù)據(jù)是保存在內(nèi)存中的變量中的蜒茄,只程序運(yùn)行結(jié)束唉擂,數(shù)據(jù)就會(huì)被銷毀。
為了保存程序在運(yùn)行過程上的產(chǎn)生的數(shù)據(jù)檀葛,我們可以將數(shù)據(jù)保存在文件中玩祟。如果數(shù)據(jù)比較簡單可以選擇文件進(jìn)行保存。
如果使用文件保存數(shù)據(jù)屿聋,由于文件文件中只能保存字符串卵凑。
為了能夠?qū)?shù)據(jù)的類型與值一同保存起來,所以需要使用序列化
序列化
序列化就是將數(shù)據(jù)轉(zhuǎn)換為一種能夠即可以表示類型又可以表示值的字符串胜臊。
serialize(變量);將指定的變量中的數(shù)據(jù)進(jìn)行序列化
反序列化
unserialize(string);
string是序列化后的字符串。
是對string進(jìn)行返回序列化伙判。
對象的序列化與反序列化:
__sellp:將對象轉(zhuǎn)換為字符串用于持久存儲(chǔ)(使用serialize 將對象串行化的時(shí)候會(huì)自動(dòng)調(diào)用象对,串行化一個(gè)對象將會(huì)保存對象的所有屬性變量和類名信息,但是不會(huì)保存對象的方法)
__wakeup:使用unserialize 將字符串還原為對象的時(shí)候會(huì)自動(dòng)調(diào)用
反射機(jī)制
反射(Reflection)一詞形象說明一個(gè)類的作用;獲取所服務(wù)的類所有的信息宴抚,與一個(gè)類相關(guān)的信息
反射類
①勒魔、export方法
ReflectionClass::export(類名或?qū)ο?
說明:
用于返回一個(gè)類相關(guān)成員的描述
②、反射對象
ReflectionClass即然是一個(gè)類也可以被實(shí)例化菇曲。
語法:
$ref = new ReflectionClass(類名或?qū)ο?;
說明:
用于實(shí)例化一個(gè)反射對象
異常:
異常處理語法:
try{
//try語句塊
throw(異常對象);
}catch(異常類 $e){
//異常處理塊
}catch(異常類 $e){
//異常處理塊
}
說明:
在try語句塊中嘗試捕獲與catch后的異常類對應(yīng)的異常對象冠绢,將異常對象捕獲到$e這個(gè)變量中。