PHP 中的類(lèi)
發(fā)表時(shí)間:2024-06-04 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]PHP 中的類(lèi)在闡述類(lèi)的概念之前我們來(lái)先說(shuō)說(shuō)面向?qū)ο缶幊痰母拍睿好嫦驅(qū)ο蟮某绦蛟O(shè)計(jì)(Object-Oriented Programming,簡(jiǎn)記為OOP)立意于創(chuàng)建軟件重用代碼,具備更好地模擬現(xiàn)實(shí)世界環(huán)境的能力,這使它被公認(rèn)為是自上而下編程的優(yōu)勝者。它通過(guò)給程序中加入擴(kuò)展語(yǔ)句,把函數(shù)“封裝”進(jìn)編程...
PHP 中的類(lèi)在闡述類(lèi)的概念之前我們來(lái)先說(shuō)說(shuō)面向?qū)ο缶幊痰母拍睿好嫦驅(qū)ο蟮某绦蛟O(shè)計(jì)(Object-Oriented Programming,簡(jiǎn)記為OOP)立意于創(chuàng)建軟件重用代碼,具備更好地模擬現(xiàn)實(shí)世界環(huán)境的能力,這使它被公認(rèn)為是自上而下編程的優(yōu)勝者。它通過(guò)給程序中加入擴(kuò)展語(yǔ)句,把函數(shù)“封裝”進(jìn)編程所必需的“對(duì)象”中。面向?qū)ο蟮木幊陶Z(yǔ)言使得復(fù)雜的工作條理清晰、編寫(xiě)容易。說(shuō)它是一場(chǎng)革命,不是對(duì)對(duì)象本身而言,而是對(duì)它們處理工作的能力而言。對(duì)象并不與傳統(tǒng)程序設(shè)計(jì)和編程方法兼容,只是部分面向?qū)ο蠓炊鴷?huì)使情形更糟。除非整個(gè)開(kāi)發(fā)環(huán)境都是面向?qū)ο蟮,否則對(duì)象產(chǎn)生的好處還沒(méi)有帶來(lái)的麻煩多。有人可能會(huì)說(shuō)PHP不是一個(gè)真正的面向?qū)ο缶幊痰恼Z(yǔ)言, PHP 是一個(gè)混合型 語(yǔ)言,你可以使用面向?qū)ο缶幊蹋部梢允褂脗鹘y(tǒng)的過(guò)程化編程。然而,對(duì)于大型項(xiàng)目的開(kāi)發(fā),你可能想需要在PHP中使用純的面向?qū)ο缶幊倘ヂ暶黝?lèi),而且在你的項(xiàng)目開(kāi)發(fā)只用對(duì)象和類(lèi)。隨著項(xiàng)目越來(lái)越大,使用面向?qū)ο缶幊炭赡軙?huì)有幫助,面向?qū)ο缶幊檀a很容易維護(hù),容易理解和重復(fù)使用,這些就是軟件工程的基礎(chǔ)。在基于Web的項(xiàng)目中應(yīng)用這些概念就成為將來(lái)網(wǎng)站成功的關(guān)鍵。
對(duì)象(Object)是問(wèn)題域或?qū)崿F(xiàn)域中某些事物的一個(gè)抽象,它反映此事物在系統(tǒng)中需要保存的信息和發(fā)揮的作用;它是一組屬性和有權(quán)對(duì)這些屬性進(jìn)行操作的一組服務(wù)的封裝體。 關(guān)于對(duì)象要從兩方面理解:一方面指系統(tǒng)所要處理的現(xiàn)實(shí)世界中的對(duì)象;另一方面對(duì)象是計(jì)算機(jī)不直接處理的對(duì)象,而是處理相應(yīng)的計(jì)算機(jī)表示,這種計(jì)算機(jī)表示也稱(chēng)為對(duì)象。簡(jiǎn)單的來(lái)說(shuō),一個(gè)人就是一個(gè)對(duì)象,一個(gè)尺子也可以說(shuō)是個(gè)對(duì)象。當(dāng)這些對(duì)象可以用數(shù)據(jù)直接表示時(shí),我們就稱(chēng)他為屬性,尺子的度量單位可以是厘米,公尺或英尺,這個(gè)度量單位就是尺子的屬性。
在PHP里我們可以定義一個(gè)類(lèi),類(lèi)(Class)就是指變量與一些使用這些變量的函數(shù)的集合。PHP是一種松散類(lèi)型的語(yǔ)言,所以通過(guò)類(lèi)型重載不起作用,通過(guò)參數(shù)的個(gè)數(shù)不同來(lái)重載也不起作用。 有時(shí)在面向中重載構(gòu)造函數(shù)非常好,這樣你可以通過(guò)不同的方法創(chuàng)建對(duì)象(傳遞不同數(shù)量的參數(shù))。在PHP中就是通過(guò)類(lèi)來(lái)實(shí)現(xiàn)的。
在PHP中是通過(guò)類(lèi)來(lái)完成信息封裝的,在PHP中定義類(lèi)的語(yǔ)法是:
class Class_name // 在面向?qū)ο缶幊填?lèi)中,習(xí)慣上類(lèi)的第一個(gè)字符為大寫(xiě),并且必須符合變量的命名規(guī)則。
{
//函數(shù)與變量的集合
}
?>
在定義類(lèi)時(shí)你可以按自已的喜好的格式進(jìn)行定義,但最好能保持一種標(biāo)準(zhǔn),這樣開(kāi)發(fā)起來(lái)會(huì)更有效些。
數(shù)據(jù)成員在類(lèi)中使用"var"聲明來(lái)定義,在給數(shù)據(jù)成員賦值之前,它們是沒(méi)有類(lèi)型的。一個(gè)數(shù)據(jù)成員可以是一個(gè)整數(shù),一個(gè)數(shù)組,一個(gè)相關(guān)數(shù)組(Associative Array)或者是一個(gè)對(duì)象。
下面是一個(gè)類(lèi)定義的實(shí)際例子:
class Student
{
var $str_Name; //姓名
var $str_Sex; //性別
var $int_Id; //學(xué)號(hào)
var $int_English; //英語(yǔ)成績(jī)
var $int_maths; //數(shù)學(xué)成績(jī)
}
?>
這是一個(gè)很普通定義類(lèi)的簡(jiǎn)單例子,用于顯示學(xué)生的學(xué)習(xí)成績(jī),類(lèi)名為Student,Student類(lèi)包涵了一個(gè)學(xué)生的基本屬性:姓名、性別、學(xué)號(hào)、英語(yǔ)成績(jī)和數(shù)學(xué)成績(jī)。
function我們稱(chēng)之為在類(lèi)中被定義的函數(shù),在函數(shù)中訪問(wèn)類(lèi)成員變量時(shí),你應(yīng)該使用$this->var_name,其中var_name指的是類(lèi)中被聲明的變量,否則對(duì)一個(gè)函數(shù)來(lái)說(shuō),它只能是局部變量。 我們先定義一個(gè)Input()的函數(shù),用來(lái)給實(shí)例中的對(duì)象賦以初值:
function Input ( $Name, $Sex, $Id, $Englis, $Maths)
{
$this->str_Name=$Name;
$this->str_Sex =$Sex;
$this->int_Id =$Id;
$this->int_Englis=$English;
$this->int_Maths=$Maths;
}
現(xiàn)在我們?cè)俣x一個(gè)叫“ShowInfo()”的函數(shù),用于打印學(xué)生的基本情況:
function ShowInfo() //定義ShowInfo()函數(shù)
{
echo (“姓名:$this->str_Name
”);
echo (“性別:$this->str_Sex
”);
echo (“學(xué)號(hào):$this->int_Id
”);
echo (“英語(yǔ)成績(jī):$this->int_English
”);
echo (“數(shù)學(xué)成績(jī):$this->int_Maths
”);
}
而定義好的類(lèi)則必須使用new關(guān)鍵詞來(lái)生成對(duì)象:
$A_student=new Student;
例如我們要為一個(gè)名為$Wing的對(duì)象創(chuàng)建實(shí)例,并進(jìn)行賦值,可以使用下面的代碼:
$Wing =new Student; //用new關(guān)鍵詞來(lái)生成對(duì)象
$Wing ->Input (“Wing”,”男”,33,95,87);
//分別輸入Wing的姓名、性別、學(xué)號(hào)、英語(yǔ)成績(jī)、數(shù)學(xué)成績(jī),其中姓名和性別是字符型變量,所以需要用雙引號(hào),其它為數(shù)值型變量則不需要。
通過(guò)下面這段完整的源代碼,我們就可以很清楚的看到類(lèi)在PHP是怎么被運(yùn)用的:
class Student
{
var $str_Name;
var $str_Sex;
var $int_Id;
var $int_English;
var $int_maths;
function Input ( $Name, $Sex, $Id, $English, $Maths)
{
$this->str_Name=$Name;
$this->str_Sex =$Sex;
$this->int_Id =$Id;
$this->int_English=$English;
$this->int_Maths=$Maths;
}
function ShowInfo()
{
echo (“姓名:$this->str_Name
”);
echo (“性別:$this->str_Sex
”);
echo (“學(xué)號(hào):$this->int_Id
”);
echo (“英語(yǔ)成績(jī):$this->int_English
”);
echo (“數(shù)學(xué)成績(jī):$this->int_Maths
”);
}
}
$Wing = new Student;
$Wing->Input (“Wing”,”男”,33,95,87);
$Paladin = new Student;
$Paladin->Input (“paladin”,”女”,38,58,59.5);
$Wing->ShowInfo();
$Paladin->ShowInfo();
?>
執(zhí)行結(jié)果應(yīng)是這樣的:
姓名:Wing
性別:男
學(xué)號(hào):33
英語(yǔ)成績(jī):95
數(shù)學(xué)成績(jī):87
姓名:Paladin
性別:女
學(xué)號(hào):38
英語(yǔ)成績(jī):58
數(shù)學(xué)成績(jī):59.5
PHP現(xiàn)有的版本較以前的版本在對(duì)面向?qū)ο缶幊痰闹С址矫嬗辛撕艽蟮母纳疲С值倪不是很完整,不過(guò)現(xiàn)階段PHP對(duì)面向?qū)ο缶幊陶Z(yǔ)言提供的支持不但有利于我們?cè)O(shè)計(jì)程序的結(jié)構(gòu),對(duì)于對(duì)程序的維護(hù)也能提供很大的幫助。
全文出自 : cngnu