亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

如何在yii2框架的di容器源碼中了解反射的作用

2020-03-22 19:06:24
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了關于如何在yii2框架的di容器源碼中了解反射的作用,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

反射簡介

參考官方簡介的話,PHP 5 具有完整的反射 API,添加了對類、接口、函數、方法和擴展進行反向工程的能力。 此外,反射 API 提供了方法來取出函數、類和方法中的文檔注釋

YII2框架中示例

對于yii2框架,應該都知道di容器,對于di容器的源碼這里也主要講明Container類,先看看平時怎么使用di,就用yii2框架中注釋的示例代碼來展示;

container調用示例
namespace app/models;use yii/base/BaseObject;use yii/db/Connection;use yii/di/Container;interface UserFinderInterface function findUser();html' target='_blank'>class UserFinder extends BaseObject implements UserFinderInterface public $db; public function __construct(Connection $db, $config = []) $this- db = $db; parent::__construct($config); public function findUser() class UserLister extends BaseObject public $finder; public function __construct(UserFinderInterface $finder, $config = []) $this- finder = $finder; parent::__construct($config); $container = new Container; $container- set( yii/db/Connection , [ dsn = ... , $container- set( app/models/UserFinderInterface , [ class = app/models/UserFinder , $container- set( userLister , app/models/UserLister  $lister = $container- get( userLister  // 上述操作相當于下列實現 $db = new /yii/db/Connection([ dsn = ...  $finder = new UserFinder($db); $lister = new UserLister($finder);

上面的示例代碼只是實例化了Container類,然后調用set方法注入了其他對象,最后獲取到了依賴與其他對象創建的lister對象,既然只調用了set方法與get方法,那就先從調用最多的set開始看Container代碼。

set方法
public function set($class, $definition = [], array $params = []) $this- _definitions[$class] = $this- normalizeDefinition($class, $definition); $this- _params[$class] = $params; unset($this- _singletons[$class]); return $this;}

上面的代碼比較簡潔,調用了類的normalizeDefinition方法,這個一會再說,先說明在該方法中出現的三個屬性的含義

_definitions數組,保存依賴定義

_params數組,保存構造函數的參數

_singletons,保存單例

再看normalizeDefinition方法,該方法主要作用是規范類定義

protected function normalizeDefinition($class, $definition) if (empty($definition)) { // 為空 return [ class = $class]; } elseif (is_string($definition)) { // 為字符串 return [ class = $definition]; } elseif (is_callable($definition, true) || is_object($definition)) { // 檢驗是否為可調用函數或者對象 return $definition; } elseif (is_array($definition)) { // 檢測是否為數組 if (!isset($definition[ class ])) { if (strpos($class, // ) !== false) { $definition[ class ] = $class; } else { throw new InvalidConfigException( A class definition requires a class member.  return $definition; throw new InvalidConfigException( Unsupported definition type for / $class/ : . gettype($definition));}

上述代碼中已做了一些判斷注釋,不難發現最后需要返回的definition變量需要為數組格式,或者可調用函數與對象,注意回到剛開始的調用示例代碼,definition變量分別有數組格式不帶class鍵,
數組格式帶class鍵,與字符串類型。到底set方法調用已完畢,從源碼中分析基本上看不到反射的影子,也就是些傳入參數格式兼容處理再寫入類屬性,接著來看下示例代碼中的get方法吧。

get 方法
public function get($class, $params = [], $config = []) if (isset($this- _singletons[$class])) { // 直接返回單例 return $this- _singletons[$class]; } elseif (!isset($this- _definitions[$class])) { // 調用bulid return $this- build($class, $params, $config); $definition = $this- _definitions[$class]; if (is_callable($definition, true)) { // 可調用函數情況 $params = $this- resolveDependencies($this- mergeParams($class, $params)); $object = call_user_func($definition, $this, $params, $config); } elseif (is_array($definition)) { // 數組 $concrete = $definition[ class  unset($definition[ class  $config = array_merge($definition, $config); $params = $this- mergeParams($class, $params); if ($concrete === $class) { $object = $this- build($class, $params, $config); } else { $object = $this- get($concrete, $params, $config); } elseif (is_object($definition)) { // 對象直接保存到單例屬性集合中去 return $this- _singletons[$class] = $definition; } else { throw new InvalidConfigException( Unexpected object definition type: . gettype($definition)); if (array_key_exists($class, $this- _singletons)) { // singleton $this- _singletons[$class] = $object; return $object;}

上述代碼,簡要劃分一下,請稍作瀏覽,后面會繼續講述,先說明屬性_definitions集合中不存在的情況,即調用build,這個一會說明,再看如果存在相關class鍵的情況,下面會做幾種情況的處理,

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲一区第一页| 一本色道久久88综合亚洲精品ⅰ| 日本久久久久亚洲中字幕| 亚洲精品成人免费| 91九色在线视频| 日韩av综合网站| 97婷婷大伊香蕉精品视频| 欧美激情xxxxx| 久久久精品欧美| 久热国产精品视频| 亚洲国产精品久久| 亚洲色图13p| 奇米一区二区三区四区久久| 久久在精品线影院精品国产| 91精品国产沙发| 7m第一福利500精品视频| 久久频这里精品99香蕉| 国产在线拍偷自揄拍精品| 国产一区二区三区欧美| 成人黄在线观看| 国产精品视频免费观看www| 亚洲视频视频在线| 欧美国产乱视频| 欧美激情a在线| 亚洲精品v欧美精品v日韩精品| 国产做受高潮69| 最新中文字幕亚洲| 国产美女搞久久| 亚洲精品二三区| 亚洲国产精品va在看黑人| 国产精品高潮粉嫩av| 最新91在线视频| 久久网福利资源网站| 日本免费久久高清视频| 久久久国产精品x99av| 欧美国产一区二区三区| 5566日本婷婷色中文字幕97| 精品性高朝久久久久久久| 国内成人精品一区| 最近2019中文字幕一页二页| 欧美中文字幕在线视频| 亚洲日本成人女熟在线观看| 精品久久久久久电影| 91高潮精品免费porn| 国产精品影院在线观看| 国产精品吹潮在线观看| 久久久久久美女| 国产成人免费91av在线| 欧美综合国产精品久久丁香| 成人写真视频福利网| 亚洲黄色有码视频| 欧美在线激情视频| 亚洲美女精品成人在线视频| 国产精品对白刺激| 中文字幕亚洲情99在线| 亚洲精品视频在线观看视频| 91av免费观看91av精品在线| 91精品久久久久久久| 日韩欧美在线视频日韩欧美在线视频| 精品国产拍在线观看| 国产乱人伦真实精品视频| 久久久久久久久久久人体| 亚洲最大激情中文字幕| 国产日韩精品入口| 91免费视频网站| 久久久久久久一区二区三区| 九九热r在线视频精品| 亚洲偷熟乱区亚洲香蕉av| 欧美激情第99页| 精品免费在线观看| 国产一区二区动漫| 日韩免费观看av| 成人亚洲激情网| 成人网在线视频| 中文日韩在线观看| 色哟哟亚洲精品一区二区| 日韩免费中文字幕| 97精品一区二区视频在线观看| 91综合免费在线| 97av在线视频免费播放| 欧美日韩精品在线| 成人在线小视频| 欧美在线观看视频| 日韩精品极品在线观看播放免费视频| 九九九热精品免费视频观看网站| 亚洲精品国产品国语在线| 亚洲一区二区国产| 91九色单男在线观看| 大荫蒂欧美视频另类xxxx| 亚洲一区二区三区在线视频| 国产一区二区三区视频在线观看| 成人免费观看a| 亚洲欧美日韩视频一区| 日本免费一区二区三区视频观看| 亚洲国产精品女人久久久| 91免费视频国产| 欧美天堂在线观看| 亚洲成年网站在线观看| 91免费版网站入口| 成人福利视频网| 国产欧美一区二区三区久久| 俺也去精品视频在线观看| 日韩在线观看免费全集电视剧网站| 久久精品视频99| 欧美激情啊啊啊| 色琪琪综合男人的天堂aⅴ视频| 国产亚洲一区二区精品| 92福利视频午夜1000合集在线观看| 日韩中文字幕精品| 欧美在线观看一区二区三区| 91九色综合久久| 一级做a爰片久久毛片美女图片| 5252色成人免费视频| 亚洲欧美国内爽妇网| 久久精品中文字幕电影| 欧美一级淫片aaaaaaa视频| 丝袜亚洲欧美日韩综合| 亚洲综合在线做性| 1769国产精品| 在线观看日韩专区| 亚洲高清av在线| 中文在线资源观看视频网站免费不卡| 在线精品高清中文字幕| 国产成人精品亚洲精品| 亚洲资源在线看| 在线电影中文日韩| 欧美日韩国产中字| 国内精品中文字幕| 久久色精品视频| 久久99亚洲精品| 揄拍成人国产精品视频| 欧美专区在线观看| 亚洲欧美日韩精品久久奇米色影视| 国产精品999999| 欧美激情手机在线视频| 国产精品免费电影| 欧美美最猛性xxxxxx| 色777狠狠综合秋免鲁丝| 亚洲欧美日韩另类| 91久久久精品| 日韩av不卡在线| 国产精品亚洲片夜色在线| 97久久精品人搡人人玩| 97国产精品视频人人做人人爱| 欧美特黄级在线| 中文字幕日本欧美| 亚洲视频在线播放| 日韩欧美中文第一页| 久久精品国产2020观看福利| 成人免费黄色网| 亚洲女人被黑人巨大进入al| 国产日本欧美一区二区三区| 97久久久免费福利网址| 热99在线视频| 在线丨暗呦小u女国产精品| 亚洲国产另类 国产精品国产免费| 成人国产精品色哟哟| 中文字幕无线精品亚洲乱码一区| 日韩性生活视频| 国产精品揄拍500视频| 精品亚洲一区二区三区四区五区| 亚洲视频免费一区| 成人网在线免费观看| 欧美在线观看视频|