一、寫類的要點: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、在實際的編程實踐中,很是不提倡在同一個文件中定義多個命名空間(不要在大括號外部加任何代碼)