架構中是如何調用子類方法的?

來源:互聯網
上載者:User
關鍵字 php yii2 laravel php架構
很多架構都提供了前置後後置操作,比如__init()方法,會在__construct()後首先被調用。

YII2中會有beforeFind(),afterFind()。

這些都是自訂方法,比如在UserModel,但是UserModel extends Model

我發現這些方法的調用都是在Model這個父類中調用的,為什麼父類能調用子類的方法?

還是通過其他方法調用的?

補充一下:

架構中類似的__init()、beforeFind(),afterFind()等等這些前置後置方法,是如何被調用的。

回複內容:

很多架構都提供了前置後後置操作,比如__init()方法,會在__construct()後首先被調用。

YII2中會有beforeFind(),afterFind()。

這些都是自訂方法,比如在UserModel,但是UserModel extends Model

我發現這些方法的調用都是在Model這個父類中調用的,為什麼父類能調用子類的方法?

還是通過其他方法調用的?

補充一下:

架構中類似的__init()、beforeFind(),afterFind()等等這些前置後置方法,是如何被調用的。

後期靜態繫結

不知道是不是你需要的東西,用於靜態方法的。

PHP:後期靜態繫結

沒太明白你的意思, 我想父類在定義的時候都不知道會有什麼子類方法,怎麼可能會調用子類的方法。
你說的自訂方法是重寫的父類的方法還是完全屬於子類的方法,
好糾結O.O
貼下代碼吧

我明白你的意思了。
我沒有安裝YII2 ,我找了下TP的相同功能函數,比如說控制器的初始化方法_initialize。其實在執行個體化控制器類的時候在__construct中就有調用

/**     * 架構函數 取得模板對象執行個體     * @access public     */    public function __construct() {        Hook::listen('action_begin',$this->config);        //執行個體化視圖類        $this->view     = Think::instance('Think\View');        //控制器初始化        if(method_exists($this,'_initialize'))            $this->_initialize();    }

這是TP的控制器基類中的代碼,調用了_initialize 大概你的意思是為什麼就調用了子類的這個初始化方法吧。
子類對於public修飾的方法和成員變數都是可以繼承的。
你執行個體化子類的時候調用肯定是子類重寫的方法,如果沒有重寫,就調用從父類繼承過來的方法。這裡不是父類調用的,而是子類調用的
你可以測試下。

class MyParent{    function __construct(){        if(method_exists($this, 'test')){            $this->test();        }    }    function test(){        echo "this is parent's test\n";    }}class MyChild extends MyParent{    function test(){        echo "this is child's test\n";    }}$object1 = new MyChild();$object2 = new MyParent();

個人的理解哈。O.O

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.