體驗類別與物件
#1,php物件導(dǎo)向的介紹
#在物件導(dǎo)向的程式設(shè)計(英文:Object-oriented programming,縮寫:OOP)中,物件是一個由資訊及對資訊進行處理的描述所組成的整體,是對現(xiàn)實世界的抽象。
在現(xiàn)實世界裡我們所面對的事情都是對象,如電腦、電視、腳踏車等。
物件的主要三個特性:
物件的行為:可以對 物件施加那些操作,開燈,關(guān)燈就是行為。物件的形狀:當施加那些方法是物件如何回應(yīng),顏色,尺寸,外型。物件的表示:物件的表示就相當於身分證,具體區(qū)分在相同的行為與狀態(tài)下有什麼不同。
例如Animal(動物) 是一個抽象類,我們可以具體到一隻狗跟一隻羊,而狗跟羊就是具體的對象,他們有顏色屬性,可以寫,可以跑等行為狀態(tài)。
物件物件內(nèi)容
類別?? 定義了一件事物的抽象特性。類別的定義包含了資料的形式以及資料的操作。
物件?? 是類別的實例。
成員變數(shù)?? 定義在類別內(nèi)部的變數(shù)。該變數(shù)的值對外是不可見的,但是可以透過成員函數(shù)訪問,在類別被實例化為物件後,該變數(shù)即可稱為物件的屬性。
成員函數(shù)?? 定義在類別的內(nèi)部,可用來存取物件的資料。
繼承?? 繼承性是子類別自動共享父類別資料結(jié)構(gòu)和方法的機制,這是類別之間的關(guān)係。在定義和實作一個類別的時候,可以在一個已經(jīng)存在的類別的基礎(chǔ)之上來進行,把這個已經(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ù)或者方法。
抽象性?? 抽象性是指將具有一致的資料結(jié)構(gòu)(屬性)和行為(操作)的物件抽象化成類別。一個類別就是這樣一種抽象,它反映了與應(yīng)用相關(guān)的重要性質(zhì),而忽略其他一些無關(guān)內(nèi)容。任何類別的劃分都是主觀的,但必須與具體的應(yīng)用有關(guān)。
封裝?? 封裝是指將現(xiàn)實世界中存在的某個客體的屬性與行為綁定在一起,並放置在一個邏輯單元內(nèi)。
建構(gòu)函式?? 主要用來在建立物件時初始化對象, 即為物件成員變數(shù)賦初始值,總是與new運算子一起使用在建立物件的語句中。
析構(gòu)函數(shù)?? 析構(gòu)函數(shù)(destructor) 與建構(gòu)子相反,當物件結(jié)束其生命週期時(例如物件所在的函數(shù)已調(diào)用完畢),系統(tǒng)會自動執(zhí)行析構(gòu)函數(shù)。析構(gòu)函數(shù)往往用來做"清理善後" 的工作(例如在建立物件時用new開闢了一片記憶體空間,應(yīng)在退出前在析構(gòu)函數(shù)中用delete釋放)。
2,定義一個學(xué)生類別
在物件導(dǎo)向思想中提出兩個概念,類別與物件,類別是對一類事物的抽象描述,也就是說類別需要具備這個物件的特徵,我們平常怎麼描述一個人的特徵呢?
例如一個學(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è)計是做得不夠好。
(4). 超過三個單字組成的混合類別名稱是容易造成系統(tǒng)各個實體間的混淆,請重新設(shè)計類別名稱。
例如:
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,物件的建立
新一個php檔案用來實例化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,是因為並沒有給它設(shè)定屬性,接下來我們進行屬性的設(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,成員方法的呼叫
在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é)果: