|
面向?qū)ο缶幊蹋∣bject Oriented Programming,OOP,面向?qū)ο蟪绦蛟O(shè)計(jì))是一種計(jì)算機(jī)編程架構(gòu),OOP 的一條基本原則是計(jì)算機(jī)程序是由單個(gè)能夠起到子程序作用的單元或?qū)ο蠼M合而成,OOP 達(dá)到了軟件工程的三個(gè)目標(biāo):重用性、靈活性和擴(kuò)展性。為了實(shí)現(xiàn)整體運(yùn)算,每個(gè)對(duì)象都能夠接收信息、處理數(shù)據(jù)和向其它對(duì)象發(fā)送信息。面向?qū)ο笠恢笔擒浖_(kāi)發(fā)領(lǐng)域內(nèi)比較熱門的話題,首先,面向?qū)ο蠓先祟惪创挛锏囊话阋?guī)律。其次,采用面向?qū)ο蠓椒梢允瓜到y(tǒng)各部分各司其職、各盡所能。為編程人員敞開(kāi)了一扇大門,使其編程的代碼更簡(jiǎn)潔、更易于維護(hù),并且具有更強(qiáng)的可重用性。有人說(shuō)php 不是一個(gè)真正的面向?qū)ο蟮恼Z(yǔ)言,
這是事實(shí)。php 是一個(gè)混合型語(yǔ)言,你可以使用OOP,也可以使用傳統(tǒng)的過(guò)程化編程。然而,對(duì)于大型項(xiàng)目,你可能需要在php 中使用純的OOP 去聲明類,而且在你的項(xiàng)目里只用對(duì)象
和類。這個(gè)概念我先不多說(shuō)了,因?yàn)橛泻芏嗯笥堰h(yuǎn)離面向?qū)ο缶幊痰闹饕蚓褪且唤佑|面向?qū)ο蟾拍畹臅r(shí)候就理解不上去,所以就不想去學(xué)下去了。等讀者看完整篇內(nèi)容后再去把概
念搞明白吧。
2.什么是類,什么是對(duì)象,類和對(duì)象之間的關(guān)系
類的概念:類是具有相同屬性和服務(wù)的一組對(duì)象的集合。它為屬于該類的所有對(duì)象提供了統(tǒng)一的抽象描述,其內(nèi)部包括屬性和服務(wù)兩個(gè)主要部分。在面向?qū)ο蟮木幊陶Z(yǔ)言中,類是
一個(gè)獨(dú)立的程序單位,它應(yīng)該有一個(gè)類名并包括屬性說(shuō)明和服務(wù)說(shuō)明兩個(gè)主要部分。
對(duì)象的概念:對(duì)象是系統(tǒng)中用來(lái)描述客觀事物的一個(gè)實(shí)體,它是構(gòu)成系統(tǒng)的一個(gè)基本單位。一個(gè)對(duì)象由一組屬性和對(duì)這組屬性進(jìn)行操作的一組服務(wù)組成。從更抽象的角度來(lái)說(shuō),對(duì)
象是問(wèn)題域或?qū)崿F(xiàn)域中某些事物的一個(gè)抽象,它反映該事物在系統(tǒng)中需要保存的信息和發(fā)揮的作用;它是一組屬性和有權(quán)對(duì)這些屬性進(jìn)行操作的一組服務(wù)的封裝體。客觀世界是由對(duì)象
和對(duì)象之間的聯(lián)系組成的。
類與對(duì)象的關(guān)系就如模具和鑄件的關(guān)系,類的實(shí)例化結(jié)果就是對(duì)象,而對(duì)一類對(duì)象的抽象就是類。類描述了一組有相同特性(屬性)和相同行為(方法)的對(duì)象。
上面大概就是它們的定義吧,也許你是剛接觸面向?qū)ο蟮呐笥眩灰桓拍畹臇|西搞暈了,給你舉個(gè)例子吧,如果你去中關(guān)村想買幾臺(tái)組裝的PC 機(jī),到了那里你第一步要干什么,
是不是裝機(jī)的工程師和你坐在一起,按你提供的信息和你一起完成一個(gè)裝機(jī)的配置單呀,這個(gè)配置單就可以想象成是類,它就是一張紙,但是它上面記錄了你要買的PC 機(jī)的信息,如
果用這個(gè)配置單買10 臺(tái)機(jī)器,那么這10 臺(tái)機(jī)子,都是按這個(gè)配置單組成的,所以說(shuō)這10 臺(tái)機(jī)子是一個(gè)類型的,也可以說(shuō)是一類的。那么什么是對(duì)象呢,類的實(shí)例化結(jié)果就是對(duì)象,用這
個(gè)配置單配置出來(lái)(實(shí)例化出來(lái))的機(jī)子就是對(duì)象,是我們可以操作的實(shí)體,10 臺(tái)機(jī)子,10個(gè)對(duì)象。每臺(tái)機(jī)子都是獨(dú)立的,只能說(shuō)明他們是同一類的,對(duì)其中一個(gè)機(jī)做任何動(dòng)作都不會(huì)
影響其它9 臺(tái)機(jī)器,但是我對(duì)類修改,也就是在這個(gè)配置單上加一個(gè)或少一個(gè)配件,那么裝出來(lái)的9 個(gè)機(jī)子都改變了,這是類和對(duì)象的關(guān)系(類的實(shí)例化結(jié)果就是對(duì)象)。
3.什么是面向?qū)ο缶幊棠兀?/STRONG>
就不說(shuō)他的概念,如果你想建立一個(gè)電腦教室,首先要有一個(gè)房間,房間里面要有N 臺(tái)電腦,有N 張桌子,N 把椅子,白板,投影機(jī)等等,這些是什么,剛才咱們說(shuō)了,這就是對(duì)象,能看到的一個(gè)個(gè)的實(shí)體,可以說(shuō)這個(gè)電腦教室的單位就是這一個(gè)個(gè)的實(shí)體對(duì)象,它們共
同組成了這個(gè)電腦教室,那么我們是做程序,這和面向?qū)ο笥惺裁搓P(guān)系呢?開(kāi)發(fā)一個(gè)系統(tǒng)程序和建一個(gè)電腦教室類似,你把每個(gè)獨(dú)立的功能模塊抽象成類,形成對(duì)象,由多個(gè)對(duì)象組成
這個(gè)系統(tǒng),這些對(duì)象之間都能夠接收信息、處理數(shù)據(jù)和向其它對(duì)象發(fā)送信息等等相互作用。
4.如何抽象出一個(gè)類?
上面已經(jīng)介紹過(guò)了,面向?qū)ο蟪绦虻膯挝痪褪菍?duì)象,但對(duì)象又是通過(guò)類的實(shí)例化出來(lái)的,所以我們首先要做的就是如何來(lái)聲明類,做出來(lái)一個(gè)類很容易,只要掌握基本的程序語(yǔ)法定
義規(guī)則就可以做的出來(lái),那么難點(diǎn)在那里呢?一個(gè)項(xiàng)目要用到多少個(gè)類,用多少個(gè)對(duì)象,在那要定義類,定義一個(gè)什么樣的類,這個(gè)類實(shí)例化出多少個(gè)對(duì)象,類里面有多少個(gè)屬性,有
多少個(gè)方法等等,這就需要讀者通過(guò)在實(shí)際的開(kāi)發(fā)中就實(shí)際問(wèn)題分析設(shè)計(jì)和總結(jié)了。
類的定義:
class 類名{
}
使用一個(gè)關(guān)鍵字class 和后面加上一個(gè)你想要的類名以及加上一對(duì)大括號(hào),這樣一個(gè)類的結(jié)構(gòu)就定義出來(lái)了,只要在里面寫代碼就可以了,但是里面寫什么?能寫什么?怎樣寫才是
一個(gè)完整的類呢?上面講過(guò)來(lái),使用類是為了讓它實(shí)例出對(duì)象來(lái)給我們用,這就要知道你想要的是什么樣的對(duì)象了,像上面我們講的一個(gè)裝機(jī)配置單上寫什么,你裝出來(lái)的機(jī)子就有什
么。比如說(shuō),一個(gè)人就是一個(gè)對(duì)象,你怎么把一個(gè)你看好的人推薦給你們領(lǐng)導(dǎo)呢?當(dāng)然是越詳細(xì)越好了:
首先,你會(huì)介紹這個(gè)人姓名、性別、年齡、身高、體重、電話、家庭住址等等。
然后,你要介紹這個(gè)人能做什么,可以開(kāi)車,會(huì)說(shuō)英語(yǔ),可以使用電腦等等。只要你介紹多一點(diǎn),別人對(duì)這個(gè)人就多一點(diǎn)了解,這就是我們對(duì)一個(gè)人的描述,現(xiàn)在我
們總結(jié)一下,所有的對(duì)象我們用類去描述都是類似的,從上面人的描述可以看到,做出一個(gè)類來(lái),從定義的角度分兩部分,第一是從靜態(tài)上描述,第二是從動(dòng)態(tài)上描述,靜態(tài)上的描述
就是我們所說(shuō)的屬性,像上面我們看到的,人的姓名、性別、年齡、身高、體重、電話、家庭住址等等。
動(dòng)態(tài)上也就是人的這個(gè)對(duì)象的功能,比如這個(gè)人可以開(kāi)車,會(huì)說(shuō)英語(yǔ),可以使用電腦等等,抽象成程序時(shí),我們把動(dòng)態(tài)的寫成函數(shù)或者說(shuō)是方法,函數(shù)和方法是一樣的。所以,所有類
都是從屬性和方法這兩方面去寫,屬性又叫做這個(gè)類的成員屬性,方法叫做這個(gè)類的成員方法。
class 人{(lán)
成員屬性:姓名、性別、年齡、身高、體重、電話、家庭住址
成員方法:可以開(kāi)車,會(huì)說(shuō)英語(yǔ),可以使用電腦
}
屬性:
通過(guò)在類定義中使用關(guān)鍵字"var"來(lái)聲明變量,即創(chuàng)建了類的屬性,雖然在聲明成員屬性的時(shí)候可以給定初始值,但是在聲明類的時(shí)候給成員屬性初始值是沒(méi)有必要的,比如說(shuō)要是把
人的姓名賦上“張三”,那么用這個(gè)類實(shí)例出幾十個(gè)人,這幾十個(gè)人都叫張三了,所以沒(méi)有必
要,我們?cè)趯?shí)例出對(duì)象后給成員屬性初始值就可以了。
如:var $somevar;
方法(成員函數(shù)):
通過(guò)在類定義中聲明函數(shù),即創(chuàng)建了類的方法。
如:function somefun(參數(shù)列表)
{ ... ... }
代碼片段
復(fù)制代碼 代碼如下:
<?php
class Person{
//下面是人的成員屬性
var $name; //人的名字
var $sex; //人的性別
var $age; //人的年齡
//下面是人的成員方法
function say(){
//這個(gè)人可以說(shuō)話的方法
echo "這個(gè)人在說(shuō)話";
} function run(){
//這個(gè)人可以走路的方法
echo "這個(gè)人在走路";
}
}
?>
上面就是一個(gè)類的聲明,從屬性和方法上聲明出來(lái)的一個(gè)類,但是成員屬性最好在聲明
的時(shí)候不要給初始的值,因?yàn)槲覀冏龅娜诉@個(gè)類是一個(gè)描述信息,將來(lái)用它實(shí)例化對(duì)象,比
如實(shí)例化出來(lái)10 個(gè)人對(duì)象,那么這10 個(gè)人,每一個(gè)人的名字、性別、年齡都是不一樣的,
所以最好不要在這個(gè)地方給成員屬性賦初值,而是對(duì)每個(gè)對(duì)象分別賦值的。
用同樣的辦法可以做出你想要的類了,只要你能用屬性和方法能描述出來(lái)的實(shí)體都可以
定義成類,去實(shí)例化對(duì)象。
為了加強(qiáng)你對(duì)類的理解,我們?cè)僮鲆粋€(gè)類,做一個(gè)形狀的類,形狀的范圍廣了點(diǎn),我們
就做個(gè)矩形吧,先分析一下,想一想從兩方面分析,矩形的屬性都有什么?矩形的功能都有
什么?
復(fù)制代碼 代碼如下:
class 矩形
{
//矩形的屬性
矩形的長(zhǎng);
矩形的寬;
//矩形的方法
矩形的周長(zhǎng);
矩形的面積;
}
代碼片段
復(fù)制代碼 代碼如下:
<?php
class Rect{
var $kuan;
var $gao;
function zhouChang(){
計(jì)算矩形的周長(zhǎng);
} function mianJi(){
計(jì)算矩形的面積;
}
}
?>
如果用這個(gè)類來(lái)創(chuàng)建出多個(gè)矩形對(duì)象,每個(gè)矩形對(duì)象都有自己的長(zhǎng)和寬,都可以求出自
己的周長(zhǎng)和面積了。
類的聲明我們就到這里吧!!
php技術(shù):php面向?qū)ο笕ヂ?(一) 面向?qū)ο蠡A(chǔ)知識(shí),轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。