OOP的介紹
定義
面向對象程序設計php
面向對象的優勢
分工明確
提升開發效率
提升項目的靈活性
提升項目的可擴展性json
特色
封裝
繼承
多態數組
對象的操做
實例化一個對象
new 類名();
new 類型;緩存
定義類
成員屬性 修飾符
成員方法 修飾符安全
對象和類
對象 類的實例 例如:房子
類 對象的抽象 例如:房子的圖紙函數
對象實例化 和 調用
new 類名() $this->this
對象在內存中的存儲
對象名(地址)保存在棧中 先進後出
對象內的代碼保存在堆裏 先進先出設計
封裝性3d
定義 把成員屬性和成員方法 設置爲非公有,就稱爲封裝性code
特色
被封裝的屬性/方法 沒法在外部調用
只能經過$this-> 內部調用
優勢
重用性
可讀性
屬性的封裝
實現 訪問控制
提高開發效率的同時,提醒咱們對象封裝的底線
繼承
定義 子類繼承父類的成員屬性與成員方法
類繼承的應用
做用
經過繼承能夠簡化類的定義
方便擴展,擴展功能能夠寫在子類中,不會對原有父類產生影響
方便升級,經過繼承不但包含了舊的方法,還同時添加了新的功能
特色
單繼承
一個父類能夠被多個子類繼承
一個子類只能繼承一個父類
子類重寫父類的方法
定義跟父類方法重名的就能夠重寫
子類中調用父類方法 parent::funName()
魔術方法
__construct()
可選參數,對象被實例化時自動觸發
做用 給屬性賦初值,用於打開資源
__destruct()
沒法傳參,屬性銷燬以前自動觸發
做用 關閉構造方法中打開的資源
__get($param)
一個參數,在外部使用非公有屬性是自動觸發
做用 在外部訪問非公有屬性
注意 __get()必須是public
__set($params,$values)
兩個參數,在對象外部設置非公有屬性時自動觸發
做用 在對象外部設置封裝屬性
注意 __set()必須是public
__isset($param)
一個參數,在對象外部檢測封裝屬性是否存在時自動觸發
注意 使用empty()判斷非公有屬性時,必須配合__get()一塊兒使用
__unset($param)
一個參數,用unset()銷燬一個非公有屬性時自動觸發
注意 銷燬公有屬性時,因爲能夠直接訪問,因此不須要再設置該魔術方法
__clone()
在該對象被克隆的時自動觸發
注意 若是封裝該魔術方法,會致使該對象不能被克隆
__toString()
用echo或print輸出對象時自動觸發
做用 必須return一個string,通常用於對象的描述信息
__invoke()
把對象當作函數調用時自動觸發
__call($funName,$params)
兩個參數(方法名,值)當調用對象不存在的方法時自動觸發
做用 當用戶調用了不存在的操做時,用來作友好的提示
__callStatic($funName,$params)
兩個參數(方法名,值)當調用對象不存在的方法時自動觸發
做用 當用戶調用了不存在的操做時,用來作友好的提示
__sleep()
當對象被串行化時,自動調用
__wakeup()
當已被串行化的對象被反串行化時,自動調用
__autoload()
當new實例化一個不存在的類時,則自動調用此函數「__autoload()」,並將類名做爲參數傳入此函數
做用 幫助判斷是否存在須要加載的類
關鍵字
final
能夠用於修飾類和方法,最終版本,不能被重寫
做用 提升代碼的安全性,可讀性
注意 不能使用final來修飾成員屬性
static
用於修飾屬性和方法,靜態屬性,靜態方法,不須要實例化
做用 類中的幾個方法沒有太大聯繫時,能夠聲明爲靜態方法
注意 靜態屬性是共享的。也就是new不少對象也是共用一個屬性
因爲靜態修飾後,每次訪問都是訪問的同一個,因此不存在繼承問題
在一個類的方法中若沒有出現$this的調用,默認此方法爲靜態方法
靜態方法中不可使用非靜態的內容。就是不讓使用$this
const
在類的內部 定義 常量
內部 self::Name
外部 類名::Name
做用 給該類中的方法設置參數選項
instanceof
判斷當前對象類是否屬於某個類的類型 返回true/false
abstract
聲明抽象方法和抽象類 有抽象方法的類就是抽象類
串行化
serialize() 串行化
unserialize() 反串行化
做用 把當前狀態下的對象 連同對象格式與屬性值的變換 轉換爲字符串格式
對象是保存在內存中,壽命一般隨着生成該對象的程序終止而終止,而串行化後的對象就能夠實現永久存儲,能夠用作數據緩存
json
json_encode() 轉化爲json格式
json_decode() 將被轉化成json函數的數據還原
做用 數組的永久存儲
便於不一樣語言之間的數據傳輸(接口)
stdClass
快速獲得一個對象
注意 凡是用 new stdClass()的變量都不能夠出現$a->test()這種方式的使用
類型約束
約束方法和函數的傳輸類型
做用 數組 array $param
類 類名 $param
namespqce
前不容許有任何的php代碼
接口
定義 一個語法,和平時熟知的API接口沒有一點關係,使用interface定義
interface 聲明接口時使用
特色
接口中的方法,必須全是抽象方法(全部無需abstract聲明)
接口的全部成員實現,必須是常量
所得權限必須是public
聲明接口不使用class,使用interface
接口能夠被類繼承實現所有方法,也能夠被抽象類繼承實現部分方法
接口繼承不能用extends,用implements
inplements實現接口
一個類在繼承另外一個類的同時,使用implements實現一個接口(必定要先繼承在實現),能夠實現多個接口,逗號隔開就好
異常處理
錯誤處理
錯誤級別
parse error 解析錯誤
fatal error 致命錯誤
waring 警告
notice 提示
strict 規範建議
自定義錯誤處理
set_error_handler('funName')
設置用戶定義的錯誤處理函數,只能接收 waring 和 notice 錯誤
異常處理
一種可擴展,易維護的錯誤處理統一機制,提供了一種新的面向對象的錯誤錯誤處理方式
異常處理方式 徹底交給系統自帶的系統自帶的異常處理類 Exception 是全部PHP異常的基類
命名空間
定義 命名空間就是邏輯層面的目錄結構 至關於在代碼中分了文件夾
做用 在不一樣的目錄中能夠有相同的文件名 在不一樣的命名空間中能夠有相同的名字
基本規則
命名空間的定義語句前面不能有任何PHP代碼
命名空間不能控制普通變量的訪問,不一樣空間仍舊能夠傳遞普通變量的值
若是使用{}定義命名空間 那麼括號外不能有任何代碼
限定名稱
非限定名稱 test(); 當前空間下
限定名稱 A\test(); 相對路徑 ./A/test()
徹底限定名稱 \A\test(); 絕對路徑 從全局命名空間出發
常量
__NAMESPACE__當期所在空間的空間名