1. 程式人生 > >【PHP篇】面向物件基礎

【PHP篇】面向物件基礎

1、宣告:class 類名{

                         //成員屬性(變數) 修飾符 $變數名=初值;

                        //成員方法(函式) 修飾符 function 函式名(){ 執行;}

                   }

2、生成類物件:$物件名=new 類名();//也可以不加括號

3、訪問類成員:$物件名->成員名;//成員為成員屬性時不加 $

4、類的內部訪問: $this->成員名;//不可直接用成員名,this表示當前類,self表示類名

5、修飾符:private私有的,不可使用物件直接訪問,只能本類內部訪問

                    protected保護的,只能本類和本子類內部使用

                    public公有的,預設,類內外部均可用

                    final 最終的,修飾類時不可被繼承,修飾的方法不可被覆蓋,不修飾成員變數

                    static 靜態的,共用類成員,訪問時不可用物件訪問,類名::靜態成員

                    const 類常量,只能修飾類變數,宣告賦初值,不可改值,訪問:類名::類常量名

6、構造方法: function  __construct(形參){執行;}   //物件建立時第一個自動呼叫的方法

//也可為方法名和類名相同的方法; 兩個同時存在時系統呼叫__construct()

//構造方法有形參時建立物件時不傳遞會有警告

7、析構方法:function  __destruct(){執行;}    //物件消亡時最後一個自動呼叫方法

 

8、變數名呼叫類變數,可變變數法:

                                

 

9、魔術方法:

成員變數為私有的(private),使用 $物件名->成員變數名 時自動呼叫如下函式:

function __get($屬性名){  }//屬性名字,使用也是與可變變數相同;

function __set($屬性名,$屬性值){  }//在外設定私有變數時自動呼叫

function __isset($屬性名){ return false…;}//在外使用isset函式判斷私有變數時自動呼叫

function __unset($屬性名){   }//在外使用unset函式刪除私有變數時自動呼叫

function __toString(){return “輸出值”}//必須返回字串值,echo $物件名;時自動呼叫

function __call($函式名,$實引數組名){ }//物件所呼叫函式不存在時自動進入

static function __callstatic($函式名,$實引數組名){ }//5.3版本,類呼叫靜態函式不存在時自動進入

function __invoke($形參){ };//5.3版本,在物件名(“實參”);時自動呼叫

10、魔術變數:

1)      __CLASS__當前類名

2)      __METHOD__當前類方法

 

11、克隆物件:

物件引用:$新物件名=$原物件名;//併為引數新物件,只是指標指向同一處

克隆:$新物件= clone $原物件;//正真的兩個物件

自動呼叫函式:function __clone(){ $this->新物件成員;}//可初始化新物件

 

 

12、繼承:class 子類名 extends 父類名{  }//訪問時直接子類物件呼叫

private成員不可被子類內外使用,私有不繼承

成員名相同則覆蓋,子類優先,子類內部使用parent::成員名;呼叫父類成員

覆蓋時許可權只能大於或等於原許可權

繼承要呼叫父類構造方法:子類構造方法第一行寫parent::__construct(實參);

13、判斷變數是否屬於某類:$物件名 instanceof 類名;//返回bool

14、類的序列化(序列):$序列化字串名=serialize($原物件名);//物件轉字串,字串包含所有

                                      function __sleep(){return array(成員變數,成員變數);}//自動呼叫,返回需序列化變數

15、類的反序列化:$新物件名= unserialize (“序列化字串”);//字串轉物件

                                function __wakeup(){}//自動呼叫,可初始化類變數

16、抽象類:修飾符為abstract,不一定要有抽象方法

17、抽象方法:宣告一個方法沒有方法體//沒有大括號{ },修飾符為abstract,一定在抽象類裡

18、抽象類的繼承:子類必須全部實現父類的全部抽象方法,否則不可建立物件

19、介面:interface 介面名{ }//方法必須全是抽象方法,成員屬性必須全是const量,許可權必須是public

20、介面的繼承:介面繼承介面,是對父介面的擴充套件新方法和新屬性

21、介面的實現:class類名 implements 介面1,介面2{  }

22、解析字串程式碼:$字串1="echo 'ttt';";eval($字串1);//執行輸出ttt