亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

yii2行為的方法怎樣注入到組件類中

發布時間:2021-02-08 09:56:18 來源:億速云 閱讀:179 作者:小新 欄目:開發技術

小編給大家分享一下yii2行為的方法怎樣注入到組件類中,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

前言

當了解了行為屬性的注入邏輯后,方法的注入對于我們來說就很簡單了。邏輯一樣。只不過此刻我們不再調用 __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 $arg\n";
 }
}

$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 調用此行為的方法

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

以上是“yii2行為的方法怎樣注入到組件類中”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

榆林市| 泸水县| 隆安县| 藁城市| 仙游县| 衡南县| 金华市| 福泉市| 台北县| 崇州市| 龙海市| 乃东县| 夏邑县| 米泉市| 韶山市| 昆明市| 麦盖提县| 罗定市| 扶风县| 金寨县| 洮南市| 永昌县| 集贤县| 西丰县| 阿鲁科尔沁旗| 长沙市| 淄博市| 彭泽县| 巢湖市| 清丰县| 额济纳旗| 扎赉特旗| 临猗县| 东台市| 库尔勒市| 綦江县| 根河市| 白朗县| 鞍山市| 开江县| 安平县|