體驗(yàn)類與對象
1,php面向?qū)ο蟮慕榻B
在面向?qū)ο蟮某绦蛟O(shè)計(jì)(英語:Object-oriented programming,縮寫:OOP)中,對象是一個由信息及對信息進(jìn)行處理的描述所組成的整體,是對現(xiàn)實(shí)世界的抽象。
在現(xiàn)實(shí)世界里我們所面對的事情都是對象,如計(jì)算機(jī)、電視機(jī)、自行車等。
對象的主要三個特性:
對象的行為:可以對 對象施加那些操作,開燈,關(guān)燈就是行為。對象的形態(tài):當(dāng)施加那些方法是對象如何響應(yīng),顏色,尺寸,外型。對象的表示:對象的表示就相當(dāng)于身份證,具體區(qū)分在相同的行為與狀態(tài)下有什么不同。
比如 Animal(動物) 是一個抽象類,我們可以具體到一只狗跟一只羊,而狗跟羊就是具體的對象,他們有顏色屬性,可以寫,可以跑等行為狀態(tài)。
面向?qū)ο髢?nèi)容
類?? 定義了一件事物的抽象特點(diǎn)。類的定義包含了數(shù)據(jù)的形式以及對數(shù)據(jù)的操作。
對象?? 是類的實(shí)例。
成員變量?? 定義在類內(nèi)部的變量。該變量的值對外是不可見的,但是可以通過成員函數(shù)訪問,在類被實(shí)例化為對象后,該變量即可稱為對象的屬性。
成員函數(shù)?? 定義在類的內(nèi)部,可用于訪問對象的數(shù)據(jù)。
繼承?? 繼承性是子類自動共享父類數(shù)據(jù)結(jié)構(gòu)和方法的機(jī)制,這是類之間的一種關(guān)系。在定義和實(shí)現(xiàn)一個類的時候,可以在一個已經(jīng)存在的類的基礎(chǔ)之上來進(jìn)行,把這個已經(jīng)存在的類所定義的內(nèi)容作為自己的內(nèi)容,并加入若干新的內(nèi)容。
父類?? 一個類被其他類繼承,可將該類稱為父類,或基類,或超類。
子類?? 一個類繼承其他類稱為子類,也可稱為派生類。
多態(tài)?? 多態(tài)性是指相同的函數(shù)或方法可作用于多種類型的對象上并獲得不同的結(jié)果。不同的對象,收到同一消息可以產(chǎn)生不同的結(jié)果,這種現(xiàn)象稱為多態(tài)性。
重載?? 簡單說,就是函數(shù)或者方法有同樣的名稱,但是參數(shù)列表不相同的情形,這樣的同名不同參數(shù)的函數(shù)或者方法之間,互相稱之為重載函數(shù)或者方法。
抽象性?? 抽象性是指將具有一致的數(shù)據(jù)結(jié)構(gòu)(屬性)和行為(操作)的對象抽象成類。一個類就是這樣一種抽象,它反映了與應(yīng)用有關(guān)的重要性質(zhì),而忽略其他一些無關(guān)內(nèi)容。任何類的劃分都是主觀的,但必須與具體的應(yīng)用有關(guān)。
封裝?? 封裝是指將現(xiàn)實(shí)世界中存在的某個客體的屬性與行為綁定在一起,并放置在一個邏輯單元內(nèi)。
構(gòu)造函數(shù)?? 主要用來在創(chuàng)建對象時初始化對象, 即為對象成員變量賦初始值,總與new運(yùn)算符一起使用在創(chuàng)建對象的語句中。
析構(gòu)函數(shù)?? 析構(gòu)函數(shù)(destructor) 與構(gòu)造函數(shù)相反,當(dāng)對象結(jié)束其生命周期時(例如對象所在的函數(shù)已調(diào)用完畢),系統(tǒng)自動執(zhí)行析構(gòu)函數(shù)。析構(gòu)函數(shù)往往用來做"清理善后" 的工作(例如在建立對象時用new開辟了一片內(nèi)存空間,應(yīng)在退出前在析構(gòu)函數(shù)中用delete釋放)。
2,定義一個學(xué)生類
面向?qū)ο笏枷胫刑岢鰞蓚€概念,類與對象,類是對一類事物的抽象描述,也就是說類需要具備這個對象的特征,我們平常怎么描述一個人的特征呢?
比如一個學(xué)生,我們要想了解他,首先至少得知道這個學(xué)生的姓名,性別,年齡,長相等等...而這些屬性在類中我們稱之為成員屬性,了解了一個人基本屬性之后我們還想更深一步了解這個人會干什么事情,這個就涉及到這個人的行為,在類中被稱之為成員方法,在方法中我們可以定義這個人的具體作用.拿學(xué)生student來舉例
首先建一個學(xué)生類,定義為Student.class.php文件(這里為了區(qū)別普通腳本文件通常把類名改成".class.php"的形式,同時類名需要與文件名保持一致)
注意:正是由于類的文件名要與類的名字保持一致,所以一個php文件只能包含一個類定義編碼。
<?php /** * Created by PhpStorm. * User: Administrator * Date: 2018/3/3 0003 * Time: 上午 9:42 */ //定義student類 class Student{ //成員屬性 //成員方法 }
通常php對類的命名規(guī)范是這樣的:
(1). 使用英文名詞,類文件采用駝峰式寫法。以大寫字母作為詞的分隔,其他的字母均使用小寫,名詞的首個字母使用大寫,不使用下劃線。
(2). 使用完整單詞,避免縮寫詞(除非該縮寫詞被更廣泛使用,像URL,HTML)
(3). 在為類命名前首先要知道它是什么。如果通過類名提供的線索,您還是想不起這個類是什么的話,那么您的設(shè)計(jì)是做得不夠好。
(4). 超過三個單詞組成的混合類名是容易造成系統(tǒng)各個實(shí)體間的混淆,請重新設(shè)計(jì)類名。
例如:
class UserAccount{
...
}
class PaintingOrder{
...
}
3,成員屬性和成員方法的定義
<?php class Student{ //成員屬性 public $studentId; //學(xué)生學(xué)號 public $studentName;//學(xué)生姓名 public $studentAge; //學(xué)生年齡 //成員方法 public function goSchool(){ echo "{$this->studentName}去上學(xué)<br>"; } public function study($time){ echo "學(xué)習(xí)到{$time}"; } }
4,對象的創(chuàng)建
新建一個php文件用來實(shí)例化student對象
object.php:
<?php /** * Created by PhpStorm. * User: Administrator * Date: 2018/3/3 0003 * Time: 上午 10:25 */ header("content-type:text/html;charset=utf8"); require './Student.class.php'; $student=new Student(); echo "<pre>"; var_dump($student);//查看對象的類型以及具體數(shù)據(jù) echo "</pre>";
打印結(jié)果如下:
5,成員屬性的設(shè)置
我們可以看到上面打印的屬性都為null,是因?yàn)椴]有給它設(shè)置屬性,接下來我們進(jìn)行屬性的設(shè)置
代碼如下:
<?php /** * Created by PhpStorm. * User: Administrator * Date: 2018/3/3 0003 * Time: 上午 10:25 */ header("content-type:text/html;charset=utf8"); require './Student.class.php'; $student=new Student(); $student->studentName='小張'; $student->studentId=1; $student->studentAge=25; echo "<pre>"; var_dump($student); echo "</pre>";
打印結(jié)果如下:
6,成員方法的調(diào)用
在object里添加以下代碼:
<?php /** * Created by PhpStorm. * User: Administrator * Date: 2018/3/3 0003 * Time: 上午 10:25 */ header("content-type:text/html;charset=utf8"); require './Student.class.php'; $student=new Student(); $student->studentName='小張'; $student->studentId=1; $student->studentAge=25; $student->goSchool(); $student->study("22:00");
打印結(jié)果: