php->所謂"hook"

karspb發表於2021-09-09

hook,中文"鉤子",原理是在函式內留下一個空白函式呼叫,為以後程式碼的擴充或者更改留下注入空間.
主要的應用場景是程式碼外掛化,更改程式碼執行順序.

程式碼外掛化

我們經常會遇到各種需求,並且需求不確定,當你不確定一個功能函式是否要擴充,你可以給這個函式加上一些鉤子,便於以後的擴充,使得程式碼如同一個一個的積木,需要就拿來,不需要隨時去除,降低程式碼的耦合度

假裝有程式碼

程式碼我就不貼了,因為我看了一篇文章覺得他寫的比我寫的好.
參考文章: (侵刪)


更改程式碼執行順序

透過一個函式的返回值來改變程式碼的流程,有沒有很熟悉?,bingo,我們經常使用的配置檔案就是非常典型的運用場景.既然大家都很熟悉這種應用,話不多說,出道題,大家來舉一反三

如題:
當子類需要繼承父類的建構函式時,大多數人都會想到使用parent::__construct(); 但是當子類只需要父類建構函式的一部分時呢?
使用者表分為管理員和普通使用者,這時文章子類需要繼承使用者父類的普通使用者,而無需繼承管理員時,我們在例項化普通使用者後中斷構造,使其不繼續往下走.

已知:子類繼承並執行父類構造時,父類建構函式里如果出現與子類函式中相同命名的函式,子類的同名函式將覆蓋父類的同名函式.

依題意得:
使用者父類

class User{    public function __construct(){          //例項化普通使用者
          $this->normal_user = new normal_user();          //鉤子函式
          $this->hook();           //例項化管理員使用者
         $this->admin_user = new admin_user();
    }  public function hook(){       //測試變數
        $this->test = 1;
   }
}

文章子類

class Article{    public function __construct(){          //執行父類建構函式
          parent::__construct();          //列印測試變數
          var_dump($this->test);
    }  public function hook(){        //測試變數
        $this->test = 2;         //因為子類只需要例項化普通使用者類,所以中斷父類構造的執行
        return false;
   }
}

執行結果:$this->test = 2 , 並且只例項化了normal_user類



作者:DullCat
連結:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2001/viewspace-2810854/,如需轉載,請註明出處,否則將追究法律責任。

相關文章