#1,php物件導向的介紹
#在物件導向的程式設計(英文:Object-oriented programming,縮寫:OOP)中,物件是一個由資訊及對資訊進行處理的描述所組成的整體,是對現實世界的抽象。
在現實世界裡我們所面對的事情都是對象,如電腦、電視、腳踏車等。
物件的主要三個特性:
物件的行為:可以對 物件施加那些操作,開燈,關燈就是行為。物件的形狀:當施加那些方法是物件如何回應,顏色,尺寸,外型。物件的表示:物件的表示就相當於身分證,具體區分在相同的行為與狀態下有什麼不同。
例如Animal(動物) 是一個抽象類,我們可以具體到一隻狗跟一隻羊,而狗跟羊就是具體的對象,他們有顏色屬性,可以寫,可以跑等行為狀態。
物件物件內容
類別 − 定義了一件事物的抽象特性。類別的定義包含了資料的形式以及資料的操作。
物件 − 是類別的實例。
成員變數 − 定義在類別內部的變數。該變數的值對外是不可見的,但是可以透過成員函數訪問,在類別被實例化為物件後,該變數即可稱為物件的屬性。
成員函數 − 定義在類別的內部,可用來存取物件的資料。
繼承 − 繼承性是子類別自動共享父類別資料結構和方法的機制,這是類別之間的關係。在定義和實作一個類別的時候,可以在一個已經存在的類別的基礎之上來進行,把這個已經存在的類別所定義的內容當作自己的內容,並加入若干新的內容。
父類 − 一個類別被其他類別繼承,可將此類別稱為父類,或基底類,或超類別。
子類 − 一個類別繼承其他類別稱為子類,也可稱為衍生類別。
多態性 − 多態性是指相同的函數或方法可作用於多種類型的物件上並獲得不同的結果。不同的對象,收到相同訊息可以產生不同的結果,這種現象稱為多態性。
重載 − 簡單說,就是函數或方法有同樣的名稱,但是參數列表不相同的情形,這樣的同名不同參數的函數或者方法之間,互相稱之為重載函數或者方法。
抽象性 − 抽象性是指將具有一致的資料結構(屬性)和行為(操作)的物件抽象化成類別。一個類別就是這樣一種抽象,它反映了與應用相關的重要性質,而忽略其他一些無關內容。任何類別的劃分都是主觀的,但必須與具體的應用有關。
封裝 − 封裝是指將現實世界中存在的某個客體的屬性與行為綁定在一起,並放置在一個邏輯單元內。
建構函式 − 主要用來在建立物件時初始化對象, 即為物件成員變數賦初始值,總是與new運算子一起使用在建立物件的語句中。
析構函數 − 析構函數(destructor) 與建構子相反,當物件結束其生命週期時(例如物件所在的函數已調用完畢),系統會自動執行析構函數。析構函數往往用來做"清理善後" 的工作(例如在建立物件時用new開闢了一片記憶體空間,應在退出前在析構函數中用delete釋放)。
2,定義一個學生類別
在物件導向思想中提出兩個概念,類別與物件,類別是對一類事物的抽象描述,也就是說類別需要具備這個物件的特徵,我們平常怎麼描述一個人的特徵呢?
例如一個學生,我們要想了解他,首先至少得知道這個學生的姓名,性別,年齡,長相等等...而這些屬性在類中我們稱之為成員屬性,了解了一個人基本屬性之後我們還想更深一步了解這個人會幹什麼事情,這個就涉及到這個人的行為,在類別中被稱之為成員方法,在方法中我們可以定義這個人的具體作用.拿學生student來舉例
首先建一個學生類別,定義為Student.class.php檔案(這裡為了區別普通腳本檔案通常把類別名稱改成".class.php"的形式,同時類別名稱需要與檔案名稱保持一致)
注意:正是由於類別的檔案名稱要與類別的名字保持一致,所以一個php檔案只能包含一個類別定義編碼。
<?php /** * Created by PhpStorm. * User: Administrator * Date: 2018/3/3 0003 * Time: 上午 9:42 */ //定义student类 class Student{ //成员属性 //成员方法 }
通常php對類別的命名規範是這樣的:
(1). 使用英文名詞,類別檔案採用駝峰式寫法。以大寫字母作為單字的分隔,其他的字母都使用小寫,名詞的首個字母使用大寫,不使用底線。
(2). 使用完整單詞,避免縮寫詞(除非該縮寫詞被更廣泛使用,像URL,HTML)
(3). 在為類別命名之前首先要知道它是什麼。如果透過類別名稱提供的線索,您還是想不起這個類別是什麼的話,那麼您的設計是做得不夠好。
(4). 超過三個單字組成的混合類別名稱是容易造成系統各個實體間的混淆,請重新設計類別名稱。
例如:
class UserAccount{
...
#}
class PaintingOrder{
.. .
}
3,成員屬性與成員方法的定義
<?php class Student{ //成员属性 public $studentId; //学生学号 public $studentName;//学生姓名 public $studentAge; //学生年龄 //成员方法 public function goSchool(){ echo "{$this->studentName}去上学<br>"; } public function study($time){ echo "学习到{$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);//查看对象的类型以及具体数据 echo "</pre>";
列印結果如下:
#5,成員屬性的設定
我們可以看到上面列印的屬性都為null,是因為並沒有給它設定屬性,接下來我們進行屬性的設定
程式碼如下:
<?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>";
列印結果如下:
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");
列印結果: