1. 程式人生 > >2018-9-13-PHP魔術方法

2018-9-13-PHP魔術方法

魔術方法:
   __construct 構造方法(重點)
   觸發時機:
      當例項化(new)這個類的時候自動觸發
   作用:
      初始化一批成員屬性的時候使用
   引數:
      可以有可以沒有 可有可無
      如果你定義了形參,你必須傳實參,不然報錯

__destruct 析構方法(重點)

   觸發時機:
      銷燬一個物件或者程式執行完畢的時候自動觸發(PHP垃圾回收機制)
   作用:
      資料庫關閉連線
   引數:沒有引數
      如果有引數就報錯

__get(重點)
      觸發時機:
         在類的外部訪問一個受保護或者是私有的成員屬性的時候自動觸發
      作用:封裝
      引數:必須有一個引數,而且這個引數代表著 你在外部訪問的私有的受保護的成員屬性名字

__set(重點)
      觸發時機:
         在類的外部給於一個受保護或者私有的成員屬性賦值的時候自動觸發
      引數:
         必須有兩個引數分別是:第一個:你要設定的私有的受保護的成員屬性名字
         第二個:你要設定的私有的受保護的成員屬性的值

__unset(重點)
      觸發時機:
         當你在類的外部銷燬一個私有的或者受保護的成員屬性的時候自動觸發
      引數:
         必須有一個引數
         引數代表你外部銷燬的私有的或受保護的成員屬性名字

__isset(重點)
      觸發時機:
         當外部用isset去判斷一個私有的或受保護的成員屬性的時候自動觸發
      引數:
         必須有一個引數
         這個引數是私有的或受保護的成員屬性名字

__call(重點)
      觸發時機:
         當外部訪問一個不存在的成員方法的時候自動觸發
      引數:
         必須要兩個引數分別是:
         1、外部呼叫的不存在的成員方法名
         2、外部傳入的實參,並且以陣列的形式返回
      通過call 方法可以實現連貫操作????
注意:在類的外部不能訪問私有的 或者是受保護的成員屬性 和方法

三個關鍵字:
   public 公共的
      1、在類的內部可以訪問
      2、在類的外部可以訪問
      3、在繼承可以訪問
   protectred 受保護的
      1、在類的內部可以訪問
      2、在繼承可以訪問
   private 私有的
      1、在類的內部可以訪問

繼承(重點)
   PHP是單繼承(在以後會用trait模擬多繼承的問題)
兩個概念:
   父類(基類)
   子類(派生類)
方法過載:
怎麼樣子類使用父類裡面的方法
   1、$this->父類方法名字
   2、parent::父類方法名字(推薦使用這個)
   3、父類名字::父類方法名字

【關於__construct】
   子類過載父類構造方法的時候需要注意幾點
   1、父類的構造方法有幾個形參,你必須傳幾個
   2、預設值與 普通函式一樣....
注意:當子類裡面 的成員方法名 與 父類裡面方法名字 一樣的時候 會覆蓋父類的方法
如果你想使用父類的裡的方法 用 parent::父類方法名

關鍵字:
   fianl
   1、使用fianl 修飾的類不能被子類繼承使用
   2、使用fianl 關鍵字修飾的成員方法不能被過載
   3、fianl 關鍵字可以 與 public protected private 配合使用效果是疊加

定義常量:define('常量名' , '常量的值')
   類裡面定義常量
   const 常量名字(一般大寫)
   在子類裡面怎麼使用?
   1、self::常量名字(推薦)
   2、parent::常量名字
   3、$this::常量名字
   4、父類名字::常量名字
   5、子類名字::常量名字

static關鍵字:
   使用:
      類的外部
         類名::
         物件::
      類的內部
         self::
         $this::
      子類:
         parnet::
   在外部使用靜態成員方法
   $t = new Test();
   $t::say(); 物件的方式
   $t->say(); 普通的方式
   Test::say();類名::的方式(這種)