成人精品一区二区三区中文字幕-成人精品一区二区三区-成人精品一级毛片-成人精品亚洲-日本在线视频一区二区-日本在线视频免费

導航首頁 ? 技術教程 ? yii2行為的方法如何注入到組件類中詳解
全站頭部文字 我要出現在這里
yii2行為的方法如何注入到組件類中詳解 698 2023-12-10   

前言

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

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

__call call_user_func_array

__call

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

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

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

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

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

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

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

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

方法如何注入

說來蠻簡單,就一個方法

// 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(); 函數確保所有行為到位。 遍歷組件當前的行為,并判斷行為對象此方法是否存在。 如果存在則通過 call_user_func_array 調用此行為的方法

最后達到和組件調用自己的方法一樣的效果。

總結

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



主站蜘蛛池模板: 里番在线看| 秦皇岛电视台| 金时厚| 宫泽千春| 寻梦环游记英文| 02j331| 伦理 在线| 请假单| 乔治克鲁尼电影作品| 以一当百| 伸舌头接吻脱裤子| 国产老头视频| 零食加盟店10大品牌| 同桌的你电影免费观看| 繁花分集剧情| you are my sunshine简谱| 日本变态裸体挠痒痒视频| 扭扭棒卡皮巴拉教程| 以家人之名小说原著| 电影《真爱》完整播放| 节目单| 常蓝天| 卢靖姗照片| 初夜在线观看| 性欧洲高跟长靴靴交视频| 女性下体| 女演员佟欣简介| 电影《斯宾塞》| 吻大胸脱个精光| 浙江卫视在几台| 光明力量2古代封印攻略| a面b面| 包法利夫人电影| cctv5+体育赛事直播时间| 思想理论问题| 中国首富排行榜| 张国强个人简历| 红龙 电影| 电影痴汉电车| 女孩们在线观看| 老外毛片|

!!!站長長期在線接!!!

網站、小程序:定制開發/二次開發/仿制開發等

各種疑難雜癥解決/定制接口/定制采集等

站長微信:lxwl520520

站長QQ:1737366103