oop總結


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__當期所在空間的空間名

相關文章
相關標籤/搜索