(轉)php面向對象學習筆記

一、寫類的要點:javascript

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

駝峯式命名 如:class GirlFriendjava

二、 類裏面的變量--成員屬性編程

類裏面的函數--成員方法json

三、在類的成員屬性前面必定要有一個修飾詞,若是不知道是用什麼修飾詞,就可使用var(關鍵字),若是一旦有其餘的修飾詞就不要有var設計模式

 

四、構造方法 __construct();數組

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

Ⅱ、方法名稱比較特殊,能夠和類名相同名的方法名函數

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

五、析構方法 __destruct();

在對象被銷燬以前自動調用

不能帶有任參數

主要用於釋放資源(如關閉文件,釋放結果集等)

 

六、魔術方法:

__get()

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

__set()

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

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

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

 

面向對象的編程思想的三個特性:  封裝性、繼承性、多態

 

七、繼承 --- 擴展 extends

① 子類使用extends繼承父類,子類能夠將父類中全部的內容都繼承過來

② private是私有的,只能本身用,不能別人用,包括本身的子類也不能用

③ protected 這個是保護的權限, 只能是本身和本身的的子類中可使用的成員,不能在外面使用

④ public 這個是公開的權限,全部均可以, 本身和子類,類外部均可以使用

 

八、常見關鍵字

instanceof 

「instanceof」操做符用於檢測當前對象實例是否屬於某一個類的類型

final

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

一、final能夠修飾類 -- 這個類不能去擴展,不能有子類(不讓別人去擴展,這個類是最終的類時)

二、final能夠修飾方法 -- 這個方法就不能在子類中覆蓋(不讓子類去改這個方法,或擴展這個方法的功能時,這個方法也就是最終的方法)

static

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

一、使用static修飾成員屬性,存在內存的初始化靜態段

二、能夠被全部同一個類的對象共用

三、第一次用到類(類名第一次出現),類在加載到內存時,就已經將靜態的成員加到了內存

對象 -> 成員

類 :: 成員

四、靜態的成員必定要使用類來訪問

五、self能夠在類的方法中,表明本身類的($this)

六、靜態成員一旦被加載,只有腳本結束纔會被釋放掉

七、在靜態的方法中是不能訪問非靜態成員

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

 

九、單態(單例、單件)設計模式 -- 最適合php使用這個設計模式

一、若是想讓一個類只能有一個對象,就要先讓這個類不能建立對象,將構造方法private

二、能夠在類的內部使用一個靜態方法來建立對象

 

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

一、將對象轉成字符串(不用看懂) --- 串行化(serialize)

二、將字符串轉回對象 --- 反串行化(unserialize)

 

注意(串行化的時機):

一、將對象在網絡中傳輸

二、將對象持久保存

數組串行化 json -- javascript object

一、eval()函數 -- 檢查並執行php代碼

var_dump()

var_export() -- 返回關於傳遞給該函數的變量的結構信息

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

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

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

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

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

 

十一、抽象方法和抽象類

一、什麼是抽象方法?

定義:一個方法若是沒有方法體(一個方法,不使用「{}」,直接使用分號結束的方法,纔是沒有方法體的方法),這個方法就是抽象方法

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

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

二、什麼是抽象類?

1、若是一個類中有一個方法是抽象方法,則這個類就是抽象類

2、若是聲明一個抽象類,則這個類必需要使用abstract關鍵字來修飾

 

注意1:

一、只要使用abstract修飾這個類,這個類就是抽象類

二、抽象類是一種特殊的類,特殊在哪裏(在抽象類中能夠有抽象方法)

三、除了在抽象類中能夠有抽象方法之外,和正常的徹底同樣

注意2:

一、抽象類不能實例化對象,也就是抽象類不能建立出對象

二、若是看見抽象類,就必須寫這個類的子類,將抽象類中的抽象方法覆蓋(加上方法體)

三、子類必須所有實現(覆蓋重寫)抽象方法,這個子類才能建立對象,若是隻實現部分,那麼還有抽象方法,則類也就必須是抽象類

 

抽象方法的做用:

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

只寫出結構,而沒有實現,實現交給具體的子類(按本身的功能)去實現

抽象類的做用:

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

abstract class Person{

public $name;

public $sex;

//抽象方法

abstract function say();

abstract function eat();

public function run(){

echo 'run';

}

public function sleep(){

echo 'sleep';

}

}

 

十二、面向對象中的接口技術

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

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

二、抽象類和接口都不能建立實例對象

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

 

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

一、接口中的方法,必須所有是抽象方法(不能用不抽象的方法)

因此在接口中的抽象方法不須要使用abstract,直接使用分號結束便可

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

三、接口中全部的權限都必須是共有的(public)

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

接口應用的一些細節:

一、可使用extends,讓一個接口繼承另外一個接口(接口和接口 -- 只有擴展新抽象方法,沒有覆蓋的關係)

二、可使用一個類來實現接口中的所有方法,也可使用一個抽象類,來實現接口中的部分方法

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

三、就不要使用extends關鍵字,使用implements實現, implements至關於extends

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

四、一個類能夠在繼承另外一個類的同時,使用implements實現一個接口,能夠實現多個接口(必定要先繼承,再實現接口)

五、實現多個接口,只須要使用逗號分開多個接口便可

 

//聲明一個接口使用interface

interface Demo{

const NAME = '張三';

const SEX = '男';

function test1();

function test2();

function test3();

}

 

1三、PHP面象對象的特性多態

多態特性

一、程序擴展準備

技術:

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

 

1四、命名空間 -- 名字空間

一、常量

二、函數

三、類

1、namespace來聲明

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

3、定義多個命名空間,以最後一個爲準

4、在實際的編程實踐中,很是不提倡在同一個文件中定義多個命名空間(不要在大括號外部加任何代碼)

相關文章
相關標籤/搜索