《PHP編程:yii2行為的方法如何注入到組件類中詳解》要點:
本文介紹了PHP編程:yii2行為的方法如何注入到組件類中詳解,希望對您有用。如果有疑問,可以聯系我們。
相關主題:YII框架
PHP實戰前言
PHP實戰當了解了行為屬性的注入邏輯后,方法的注入對于我們來說就很簡單了.邏輯一樣.只不過此刻我們不再調用 __get 方法,而是一個用于方法的 __call 方法.下面話不多說了,來一起看看詳細的介紹:
PHP實戰在研究之前先跟我學習兩個PHP的知識:
PHP實戰__call
PHP實戰__call 是 PHP 的一個魔術方法,這個方法和 __get 功能差不多,當發現一個類的方法未定義時會觸發此函數,它有兩個參數
PHP實戰 public mixed __call ( string $name , array $arguments )
PHP實戰$name 參數是要調用的方法名稱.$arguments 參數是一個枚舉數組,包含著要傳遞給方法 $name 的參數,舉個例子
PHP實戰 class User { public function __call($name, $arguments) { echo "Calling object method '$name' " . implode(', ', $arguments). "\n"; } } // do it $model = new User(); $model->hello("abei2017");// Calling object method 'hello' abei2017
PHP實戰看懂了么,貼個官方文檔地址 傳送門
PHP實戰call_user_func_array
PHP實戰調用回調函數,并把一個數組參數作為回調函數的參數.先貼個官方文檔地址 傳送門 ,舉個例子再.
PHP實戰 class User { function Hello($arg) { echo __METHOD__, " got $arg\n"; } } $model = new User(); call_user_func_array([$model, "Hello"], ["abei2017"]); // User::Hello got abei2017
PHP實戰OK,在你了解了這兩個函數后,我們開始研究行為方法的注入.
PHP實戰方法如何注入
PHP實戰說來蠻簡單,就一個方法
PHP實戰 // vendor/yiisoft/yii2/base/Component.php public function __call($name, $params){ $this->ensureBehaviors(); foreach ($this->_behaviors as $object) { if ($object->hasMethod($name)) { return call_user_func_array([$object, $name], $params); } } throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()"); }
PHP實戰邏輯很簡單
$this->ensureBehaviors();
函數確保所有行為到位.call_user_func_array
調用此行為的方法PHP實戰最后達到和組件調用自己的方法一樣的效果.
PHP實戰總結
PHP實戰到現在我們知道如何配置行為、行為運行、行為注入原理,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持.
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/239.html