php面向對象

self-----------代表類本身,只能在當前類內部的函數中使用,代表代碼所在的類;

$this----------代表當前類的當前對象(在對象調用的方法中使用$this 就代表哪個類的對象),在子類對象調用繼承自父類的方法時,方法中的$this 是子類的對象;;如果是在static靜態方法中,不能使用;

static-------作用1:靜態變量; 作用2:靜態方法;靜態方法中不能調用非靜態方法;作用3:調用的是static所在的這個個方法,哪個類調用這個方法,static就代表這個類,作用4:靜態綁定;

parent------代表父類,

 

類中只有個三種成員:屬性,方法,常量;

除了這三種成員外,其他的如流成控制語句if ,while,for,case等都只能在函數中使用;

 

類中的屬性 前面要加上var  ;類之外的變量不需要加var ;

 

訪問修飾符:public,protected,private;----不寫默認是public;

調用:對象->屬性;(不加$)

            對象->方法;

        

 

注意方法4 不加括號;

 

對象的變量進行普通傳值得時候,複製的是對象變量中所存儲的對象標識符;對象標識符指向真正的數據;

 

 

-------------------------------------------------------------------------

對象的屬性可以定義不賦值,不能是表達式和變量,可以是直接值和常量;前面必須加上public或var;

變量必須定義的同時賦值;

定義屬性時 $前面必須要加上var 或public,

在函數中計算的時候用  $變量名  就可以了;

定義屬性的時候要加var $或者 public $;在調用屬性的時候不要加var $或者 public $;

           pow(9,0.5);----------------9的0.5次方

$this 是一個僞對象,代表當前類的當前對象;

-----------------------------

------------------靜態屬性-----------------------------------------

靜態屬性隸屬於類本身,同一個類的所有對象共享數據;

 

靜態屬性的調用-------------用類名去調用********類名::$靜態屬性名;

靜態屬性的調用-------------用對象去調用********對象名::$靜態屬性名;

 

----------------------通過對象也可以使用靜態屬性--------------------

獲取對象所屬的類名:get _class();

只是得到一個類的名稱,並不能得到這個類;

 

----------------靜態方法-----------------------

靜態方法屬於類,所有對象共有;

靜態方法的調用-------類名::靜態方法名();

對象亦可以調用靜態方法------對象名::靜態方法名();

靜態方法中不能使用$this;靜態方法中不能調用非靜態方法;

 

類調用一般的非靜態方法或靜態變量,只能在自己的類中調用,其他地方調用會報錯;類調用靜態方法可以在任何地方;

$this----------代表當前類的當前對象;如果是在static靜態方法中,通過類名調用靜態方法不能使用$this;靜態方法是用類調用,此時沒有對象;

 

靜態方法中不能調用非靜態方法,靜態方法中可以用self(代表當前類),通過類名調用的靜態方法不能用$this;一般方法中可以用this(代表當前對象)

 

==============構造方法=============

new的時候,會自動調用__construct($n,$a);如果定義構造方法,則調用時的實參必須和構造方法的參數個數一致;

如果不實現__condtruc()構造方法,系統會默認執行父類的構造方法;如果父類沒有,就一直往上找,最終找到系統的不帶參數的構造方法,那麼就對結果沒有影響;

$p=new p("lisi",18);//用構造方法創建一個對象;

==============析構方法=============

 

 

析構方法不能手動調用,在銷燬對象unset()時會自動調用,析構方法可以用於清理一些在PHP代碼結束後不能清理的數據,如生成的文件;

程序結束的時候,所有對象被銷燬,會調用析構方法;銷燬對象unset()時也會調用析構方法;改變對象變量的值,原來變量指向的對象沒有被變量指向,就會銷燬對象,也會調用析構方法;

function __destruct(){

 

}

 

PHP程序結束後,PHP所有的對象自動銷燬,析構方法是PHP內部的垃圾回收機制;

 

 

總結:

子類中沒有定義構造方法會自動調用父類的構造方法,實例化子類的時候會按照父類的構造方法進行;

子類中定義了自己的構造方法,則不會自動調用父類的構造方法,但是可以手動調用parent ::__construct();

析構方法和構造方法用法相同。

 

------------------類的繼承-----------------------

 

類的繼承:   Class A類  extends  B類{

 

}

訪問修飾符---------------------------------------------

上面的例子是子類訪問父類的屬性$p1;

下面這個例子是父類訪問子類的屬性$p2,但是不常用;要注意:

 

protected收保護的,只能在當前類或者有繼承關係的上下級使用;

 

private修飾符只能在本類中使用:

parent,self,this--------------------------------

parent :  : 父類的方法;

self :: 自己的方法或者繼承父類的方法;

$this ->自己的方法或者繼承父類的方法;

 

系統有默認的構造方法:function __construct(){   },如果自己在類中實現 了構造方法,就會覆蓋系統的構造方法;

子類中沒有定義構造方法會自動調用父類的構造方法,實例化子類的時候會按照父類的構造方法進行;

子類中定義了自己的構造方法,則不會自動調用父類的構造方法,但是可以手動調用parent ::__construct();

析構方法和構造方法用法相同。

 

 

 

//=================鏈接數據庫==============

-------------------重寫override-------------------------

重寫針對的是非構造方法和非析構方法;

將從父類繼承下來的屬性和方法重寫或者覆蓋;覆蓋是建立在繼承的基礎上,如果沒有繼承,談不上覆蓋重寫了;

訪問控制的權限不應該低於上一級的權限;

重寫的普通方法的參數個數必須和父類的參數個數一致,參數的名字可以寫成不一樣的;

構造方法可以重寫,參數也可以不一致;

私有的屬性和私有的方法,不能覆蓋,但子類可以定義和父類同名的方法和屬性,但是隻作爲當前類的自有屬性;

-------------最終類和最終方法----------------------------

最終類不能被繼承,最終方法不能被重寫;

 

---------------------設計模式-----------

工廠方法:

file_exists--------判斷文件是否存在;

單利模式:

關鍵點:private 構造方法,private clone方法;

構造方法私有了,只能在類內部使用,外部new的時候就不會調用,這樣就創建不了對象;

clone 是運算符,複製一個對象;new也是運算符;他們兩個的優先級最高;

 

注意:上面 的clone $o1是運算符,不是類中默認的clone方法,在做單利的時候必須把默認的 function __clone(){}方法private,執行clone $o1 時,類中默認的clone方法纔不會執行,否則,就會執行系統默認的clone方法;

構造方法,clone方法都叫魔術方法(就是系統默認的隱藏的方法);

 

========抽象類,抽象方法===========

 

抽象類專門做父類,子類繼承他;

=============重載是在同一個類中;重寫是在不同的類中;

上面:$o1->p2=2不存在,先調用下面一個set,然後不不存在的屬性和值存起來,然後$o1->p2不存在,又再調用上一個get,從而得到數組中值;

方法重載:使用對象調用一個不存在的方法時。

在類中可以調用類外面並且不是類中的方法。

 

==============接口----------------

接口可以實現多繼承,類不能實現多繼承;接口的作用就是統一;

類實現接口;

一個類只能繼承一個父類,但是可以實現多個接口;

----------------自動加載技術和克隆技術--------------

第一種方法:

第二種方法:

 

---------------對象的複製:

淺克隆:克隆的是非對象非資源數據;

 

 

深度克隆---------------

PHP中默認克隆是淺克隆,要想一個對象的所有屬性數據都被克隆,就需要使用魔術方法__clone()裏面實現深度克隆;

對象的遍歷:

對象遍歷只能遍歷屬性:

自定義遍歷(局部遍歷):

 

------------------------PHP內置標準類:

內置標準類:new stdclass();

 

對象類型轉換-------其他類型轉換成對象:

 

 

 

純字符下標的數組才適合轉換成對象。數字下標的數組轉成對象,不能通過數字下標訪問屬性;

 

 

標量轉換成對象:

PHP是弱類型語言,無需爲變量指定類型;PHP中只能對對象,接口,數組,函數進行約束;

 

類型約束:

 

 

 

 

get_class(對象)也可以獲取類名,但是必須要有一個對象;

 

==================數據序列化:===============

 

序列化:$str=serialize($變量);

將文件存儲起來:file_put_contents("文本文件路徑",$str);

 

 

 

 

反序列化:

 

 

 

 

 

 

 

 

類和對象的系統函數:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

static 的不同用法:

 

 

多態:

 

 

 

 

 

PHP中控制檯輸出的幾種方法:

var_dump();

printf();

echo ‘’;echo“  “;

 

===========資源與對象的辨析=========

資源是本來就存在的,直接從外部得到的;

對象是人工創造出來的;

$link=mysqli_connect("localhost","root","123");得到一個鏈接到mysql數據庫的資源;

$result =mysql_query();這個是結果集資源;

 

類實例化的過程:

對象的屬性是各個對象的,方法是共有的,只有一個方法;

 

靜態屬性:

類存在的時候,靜態屬性就已經在數據區了,跟類實例化沒關係;

 

繼承:

======$this ,在子類對象調用繼承自父類的方法時,方法中的$this 是子類的對象;

 

訪問限制:依賴於源代碼的結構,而不是依賴於對象,繼承和訪問的關係不是一件事;私有成員可以被繼承;

子類中定義的靜態成員變量是不能被父類調用的;只能在繼承鏈上向下調用,不能向上調用;

 

 

abstact:抽象類不能實例化,可以被繼承;

抽象方法包含於抽象類中,繼承抽象類的子類,必須實現父類抽象類中的抽象方法;

 

 

 

final:最終類不能再被繼承;最終方法不能再重寫;

 

====toString()====吧對象當做字符串用(如直接echo 對象),或者把對象轉成字符串時調用((string)對象)。

==========當訪問不存在或不可訪問的方法時,就會重載;

默認的處理方式:

不存在的,會自動增加;

訪問限制符,限制的,不能處理;

判斷屬性名是否存在:property__exists(對象,屬性);

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章