類常量:類常量能夠當作是一個有前綴的常量,類名是前綴,用的時候和類變量同樣 函數
構造函數:構造函數能夠這麼說是類實例最先運行的函數,構造函數能夠用__construct 或者類名 來定義,可是如今來講仍是用前者吧,後者到最後不知道會不會被淘汰; this
析構函數:析構函數是在實例被刪除的時候被調用的函數;不要在析構函數中拋出一個異常,不然會致使致命錯誤。 spa
咱們來看看下面的例子 .net
03 |
function __construct($name){ |
05 |
echo "我是構造函數,我屬於".$this->name."!qaforcode.net\n"; |
07 |
function __destruct(){ |
09 |
echo "我是析構函數,我屬於".$this->name."!qaforcode.net\n"; |
14 |
unset($a);//試試註釋掉這行看看效果 |
15 |
$b = new Zhuge("豬哥疼你"); |
抽象類:抽象類,就至關於比類更加高一層的東西。好比你的說動物,動物描述的是一個種類,而不是具體的某個動物。這個就能夠定義爲抽象類。抽象類不能直接被實例化,你必須先繼承該抽象類,而後再實例化子類。抽象類中 至少要包含一個抽象方法。若是類方法被聲明爲抽象的,那麼其中就不能包括具體的功能實現。繼承一個抽象類的時候,子類必須實現抽象類中的全部抽象方法;若是抽象類中某個抽象方法被聲明爲protected,那麼子類中實現的方法就應該聲明爲protected或者public,而不 能定義爲private。 code
01 |
abstract class Animal{ |
03 |
abstract public function eat(); |
07 |
public function eat(){ |
12 |
//$a = new Animal();會出錯 |
13 |
$black_cat = new Cat(); |
接口:接口和抽象類有點類似,只是他是功能性的,抽象類有點父子的關係,接口類有點象功能集合。電燈有發光的功能,蠟燭也有。看下面的例子 對象
03 |
public function turnoff(); |
04 |
public function turnon(); |
07 |
class ElectricLight implements Light{ |
09 |
public function turnoff(){ |
10 |
echo "turnoff by touch switch\n"; |
12 |
public function turnon(){ |
13 |
echo "turnon by touch switch\n"; |
17 |
class Candle implements Light{ |
19 |
public function turnoff(){ |
20 |
echo "turnoff by blow\n"; |
22 |
public function turnon(){ |
23 |
echo "turnon use match\n"; |
27 |
$electriclight = new ElectricLight(); |
28 |
$candle = new Candle(); |
29 |
$electriclight->turnoff(); |
你能夠指定某個類必須實現哪些方法,但不須要定義這些方法的具體內容。 繼承
咱們能夠經過interface來定義一個接口,就像定義一個標準的類同樣,但其中定義全部的方法都是空的。 接口
接口中定義的全部方法都必須是public,這是接口的特性。 字符串
要實現一個接口,可使用implements操做符。類中必須實現接口中定義的全部方法,不然 會報一個fatal錯誤。若是要實現多個接口,能夠用逗號來分隔多個接口的名稱。 get
魔術方法:PHP把全部以__(兩個下劃線)開頭的類方法當成魔術方法。因此你定義本身的類方法時,不要以 __爲前綴。
__sleep 和 __wakeup:serialize() 函數會檢查是否存在一個魔術方法 __sleep.若是存在,__sleep()方法會先被調用, 而後才執行序列化操做。與之相反,unserialize()會檢查是否存在一個__wakeup方法。若是存在,則會先調用 __wakeup方法,預先準備對象數據。
__toString:__toString 方法可讓一個類決定它如何轉換成一個字符串。
__invoke:當嘗試以調用函數的方式調用一個對象時,__invoke 方法會被自動調用。
__set_state:當調用var_export()時,這個靜態 方法會被調用
final:若是父類中的方法被聲明爲final,則子類沒法覆蓋該方法; 若是一個類被聲明爲final,則不能被繼承。
對象比較:當使用對比操做符(==)比較兩個對象變量時,比較的原則是:若是兩個對象的屬性和屬性值 都相等,並且兩個對象是同一個類的實例,那麼這兩個對象變量相等。而若是使用全等操做符(===),這兩個對象變量必定要指向某個類的同一個實例(即同一個對象)。
04 |
function __construct($name){ |
本文固定連接: http://www.qaforcode.net/archives/270 | 豬哥每日一貼