最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

yii2行為的方法如何注入到組件類中詳解

 更新時間:2017年08月24日 09:55:06   作者:阿北  
這篇文章主要給大家介紹了關于yii2中行為的方法是如何注入到組件類中去的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。

前言

當了解了行為屬性的注入邏輯后,方法的注入對于我們來說就很簡單了。邏輯一樣。只不過此刻我們不再調(diào)用 __get 方法,而是一個用于方法的 __call 方法。下面話不多說了,來一起看看詳細的介紹:

在研究之前先跟我學習兩個PHP的知識:

  • __call
  • call_user_func_array

__call

__call 是 PHP 的一個魔術方法,這個方法和 __get 功能差不多,當發(fā)現(xiàn)一個類的方法未定義時會觸發(fā)此函數(shù),它有兩個參數(shù)

public mixed __call ( string $name , array $arguments )

$name 參數(shù)是要調(diào)用的方法名稱。$arguments 參數(shù)是一個枚舉數(shù)組,包含著要傳遞給方法 $name 的參數(shù),舉個例子

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

看懂了么,貼個官方文檔地址 傳送門

call_user_func_array

調(diào)用回調(diào)函數(shù),并把一個數(shù)組參數(shù)作為回調(diào)函數(shù)的參數(shù)。先貼個官方文檔地址 傳送門 ,舉個例子再。

class User {
 function Hello($arg) {
  echo __METHOD__, " got $arg\n";
 }
}

$model = new User();
call_user_func_array([$model, "Hello"], ["abei2017"]); // User::Hello got abei2017

OK,在你了解了這兩個函數(shù)后,我們開始研究行為方法的注入。

方法如何注入

說來蠻簡單,就一個方法

// 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()");
}

邏輯很簡單

  • 使用 $this->ensureBehaviors(); 函數(shù)確保所有行為到位。
  • 遍歷組件當前的行為,并判斷行為對象此方法是否存在。
  • 如果存在則通過 call_user_func_array 調(diào)用此行為的方法

最后達到和組件調(diào)用自己的方法一樣的效果。

總結

到現(xiàn)在我們知道如何配置行為、行為運行、行為注入原理,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關文章

  • Thinkphp5+uploadify實現(xiàn)的文件上傳功能示例

    Thinkphp5+uploadify實現(xiàn)的文件上傳功能示例

    這篇文章主要介紹了Thinkphp5+uploadify實現(xiàn)的文件上傳功能,結合實例形式分析了Thinkphp5結合uploadify實現(xiàn)文件上傳的具體步驟、原理與相關操作技巧,需要的朋友可以參考下
    2018-05-05
  • TP5框架實現(xiàn)上傳多張圖片的方法分析

    TP5框架實現(xiàn)上傳多張圖片的方法分析

    這篇文章主要介紹了TP5框架實現(xiàn)上傳多張圖片的方法,結合實例形式分析了TP5上傳多張圖片相關的視圖、模型、控制器操作技巧,需要的朋友可以參考下
    2020-03-03
  • 淺談php serialize()與unserialize()的用法

    淺談php serialize()與unserialize()的用法

    本篇文章是對php中的serialize()與unserialize()的應用進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • PHP的垃圾回收機制代碼實例講解

    PHP的垃圾回收機制代碼實例講解

    這篇文章主要介紹了PHP的垃圾回收機制代碼實例講解,有感興趣的同學可以學習研究下
    2021-02-02
  • PHP URL路由類實例

    PHP URL路由類實例

    本文介紹一個PHP URL路由類,很簡單,值得學習
    2013-11-11
  • 深入解析php之sphinx

    深入解析php之sphinx

    本篇文章是對php中sphinx的使用進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • laravel5.4生成驗證碼的代碼

    laravel5.4生成驗證碼的代碼

    這篇文章主要為大家詳細介紹了laravel5.4生成驗證碼的相關代碼,使用gregwar和captcha實現(xiàn)驗證碼的具體步驟,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • PHP實現(xiàn)微信小程序在線支付功能(代碼實例)

    PHP實現(xiàn)微信小程序在線支付功能(代碼實例)

    這篇文章主要介紹了PHP微信小程序在線支付功能(代碼實例),本文通過實例代碼給大家介紹的非常詳細,對大家的工作或?qū)W習具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • 解讀PHP中上傳文件的處理問題

    解讀PHP中上傳文件的處理問題

    這篇文章主要介紹了解讀PHP中上傳文件的處理問題的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-05-05
  • Laravel框架下的Contracts契約詳解

    Laravel框架下的Contracts契約詳解

    這篇文章主要介紹了解析Laravel框架下的Contracts契約 ,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03

最新評論

靖边县| 衡阳县| 清河县| 五莲县| 荆门市| 龙江县| 彰化市| 准格尔旗| 霸州市| 河西区| 墨竹工卡县| 高安市| 广州市| 奉新县| 金秀| 桐庐县| 家居| 鄄城县| 望奎县| 浦县| 镇安县| 都江堰市| 乌恰县| 新竹县| 徐水县| 广宗县| 涿州市| 隆德县| 喀喇沁旗| 云浮市| 石台县| 屯门区| 雅安市| 凌云县| 博湖县| 平泉县| 黎川县| 叙永县| 原阳县| 武清区| 秦皇岛市|