天天看點

php面向對象學習筆記

1、寫類的要點:

類名要具有描述性,有意義

駝峰式命名 如:class GirlFriend

2、 類裡面的變量--成員屬性

類裡面的函數--成員方法

3、在類的成員屬性前面一定要有一個修飾詞,如果不知道是用什麼修飾詞,就可以使用var(關鍵字),如果一旦有其他的修飾詞就不要有var

4、構造方法 __construct();

Ⅰ 、是對象建立完成以後,第一個自動調用的方法(特殊)

Ⅱ、方法名稱比較特殊,可以和類名相同名的方法名

Ⅲ、給對象中的成員賦初值使用的

5、析構方法 __destruct();

在對象被銷毀之前自動調用

不能帶有任參數

主要用于釋放資源(如關閉檔案,釋放結果集等)

6、魔術方法:

__get()

1、自動調用:是在直接通路私有成員的時候,自動調用! 一個參數

__set()

1、自動調用:是在直接設定私有屬性值的時候,自動調用! 兩個參數

__isset() isset() 在使用isset()判斷一個私有屬性是否存在時,自動調用__isset()魔術方法,參數則是屬性名稱

__unset() unset() 在使用unset()删除一個私有成員的時候,自動調用__unset()魔術方法,參數為屬性名稱

面向對象的程式設計思想的三個特性:  封裝性、繼承性、多态

7、繼承 --- 擴充 extends

① 子類使用extends繼承父類,子類可以将父類中所有的内容都繼承過來

② private是私有的,隻能自己用,不能别人用,包括自己的子類也不能用

③ protected 這個是保護的權限, 隻能是自己和自己的的子類中可以使用的成員,不能在外面使用

④ public 這個是公開的權限,所有都可以, 自己和子類,類外部都可以使用

8、常見關鍵字

instanceof 

“instanceof”操作符用于檢測目前對象執行個體是否屬于某一個類的類型

final

在php中final不定義常量,是以就不會使用,也不能用final來修飾成員屬性

1、final可以修飾類 -- 這個類不能去擴充,不能有子類(不讓别人去擴充,這個類是最終的類時)

2、final可以修飾方法 -- 這個方法就不能在子類中覆寫(不讓子類去改這個方法,或擴充這個方法的功能時,這個方法也就是最終的方法)

static

static可以修飾屬性和方法,不能修飾類,

1、使用static修飾成員屬性,存在記憶體的初始化靜态段

2、可以被所有同一個類的對象共用

3、第一次用到類(類名第一次出現),類在加載到記憶體時,就已經将靜态的成員加到了記憶體

對象 -> 成員

類 :: 成員

4、靜态的成員一定要使用類來通路

5、self可以在類的方法中,代表自己類的($this)

6、靜态成員一旦被加載,隻有腳本結束才會被釋放掉

7、在靜态的方法中是不能通路非靜态成員

8、隻要能使用靜态的環境下聲明方法,就最好使用靜态方法(主要考慮效率)

9、單态(單例、單件)設計模式 -- 最适合php使用這個設計模式

1、如果想讓一個類隻能有一個對象,就要先讓這個類不能建立對象,将構造方法private

2、可以在類的内部使用一個靜态方法來建立對象

10、對象串行化(序列化)

1、将對象轉成字元串(不用看懂) --- 串行化(serialize)

2、将字元串轉回對象 --- 反串行化(unserialize)

注意(串行化的時機):

1、将對象在網絡中傳輸

2、将對象持久儲存

數組串行化 json -- javascript object

1、eval()函數 -- 檢查并執行php代碼

var_dump()

var_export() -- 傳回關于傳遞給該函數的變量的結構資訊

__set_state()魔術方法,就是在使用var_export()方法時,導出一個類的資訊時,自動調用的方法(靜态的、公共的)

__invoke()魔術方法 ,是在對象執行個體之後,直接像變量函數調用時,自動調用這個方法(靜态的、公共的) php5.3以後新加的方法

__call()魔術方法,是在調用不存在的方法時,自動調用這個方法

__callStatic()魔術方法,是在調用不存在的靜态方法時,自動調用這個方法(靜态的、公共的)   

__autoload()魔術方法,可以寫在類外面,隻要在這個腳本中,需要加載類的時候(必須用到類名),就會自動調用這個方法

11、抽象方法和抽象類

1、什麼是抽象方法?

定義:一個方法如果沒有方法體(一個方法,不使用“{}”,直接使用分号結束的方法,才是沒有方法體的方法),這個方法就是抽象方法

一、聲明一個方法,不使用{},而直接用分号結束。

二、如果是抽象方法,必須使用abstract(抽象關鍵字來修飾)。

2、什麼是抽象類?

一、如果一個類中有一個方法是抽象方法,則這個類就是抽象類

二、如果聲明一個抽象類,則這個類必須要使用abstract關鍵字來修飾

注意1:

1、隻要使用abstract修飾這個類,這個類就是抽象類

2、抽象類是一種特殊的類,特殊在哪裡(在抽象類中可以有抽象方法)

3、除了在抽象類中可以有抽象方法以外,和正常的完全一樣

注意2:

1、抽象類不能執行個體化對象,也就是抽象類不能建立出對象

2、如果看見抽象類,就必須寫這個類的子類,将抽象類中的抽象方法覆寫(加上方法體)

3、子類必須全部實作(覆寫重寫)抽象方法,這個子類才能建立對象,如果隻實作部分,那麼還有抽象方法,則類也就必須是抽象類

抽象方法的作用:

抽象方法的作用是規定了子類必須有這個方法的實作,功能交給子類

隻寫出結構,而沒有實作,實作交給具體的子類(按自己的功能)去實作

抽象類的作用:

就是要求子類的結構,是以抽象類就是一個規範

abstract class Person{

public $name;

public $sex;

//抽象方法

abstract function say();

abstract function eat();

public function run(){

echo 'run';

}

public function sleep(){

echo 'sleep';

}

}

12、面向對象中的接口技術

抽象類是一種特殊的類,接口是一種特殊的抽象類,是以接口是一種特殊特殊的類

1、抽象類和接口都有抽象方法

2、抽象類和接口都不能建立執行個體對象

3、抽象類和接口的使用意義也就是作用相同

接口和抽象類相比,特殊在哪裡?

1、接口中的方法,必須全部是抽象方法(不能用不抽象的方法)

是以在接口中的抽象方法不需要使用abstract,直接使用分号結束即可

2、接口中的成員屬性必須是常量,不能有變量

3、接口中所有的權限都必須是共有的(public)

4、聲明接口不使用class,而是使用interface

接口應用的一些細節:

1、可以使用extends,讓一個接口繼承另一個接口(接口和接口 -- 隻有擴充新抽象方法,沒有覆寫的關系)

2、可以使用一個類來實作接口中的全部方法,也可以使用一個抽象類,來實作接口中的部分方法

(類與接口, 抽象類與接口 -- 覆寫 -- 重寫,實作接口中的抽象方法)

3、就不要使用extends關鍵字,使用implements實作, implements相當于extends

extends繼承(擴充),這個在php中,一個類隻能有一個父類

4、一個類可以在繼承另一個類的同時,使用implements實作一個接口,可以實作多個接口(一定要先繼承,再實作接口)

5、實作多個接口,隻需要使用逗号分開多個接口即可

//聲明一個接口使用interface

interface Demo{

const NAME = '張三';

const SEX = '男';

function test1();

function test2();

function test3();

}

13、PHP面象對象的特性多态

多态特性

1、程式擴充準備

技術:

1、必須有繼承關系,父類最好是接口或者抽象類

14、命名空間 -- 名字空間

1、常量

2、函數

3、類

一、namespace來聲明

二、在namespace聲明命名空間的代碼上面,不能有任何PHP代碼和HTML内容輸出(除了declare),聲明命名空間隻能是第一條

三、定義多個命名空間,以最後一個為準

四、在實際的程式設計實踐中,非常不提倡在同一個檔案中定義多個命名空間(不要在大括号外部加任何代碼)