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