婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Laravel框架源碼解析之反射的使用詳解

Laravel框架源碼解析之反射的使用詳解

熱門標簽:辦理400電話哪家好點 邢臺400電話辦理 重慶外呼電銷系統多少錢 南京3D地圖標注 南寧電話外呼系統線路 嘟嘟云外呼系統 正規電銷機器人系統 濟源百應電銷機器人聯系方式 咸陽電銷

本文實例講述了Laravel框架源碼解析之反射的使用。分享給大家供大家參考,具體如下:

前言

PHP的反射類與實例化對象作用相反,實例化是調用封裝類中的方法、成員,而反射類則是拆封類中的所有方法、成員變量,并包括私有方法等。就如“解刨”一樣,我們可以調用任何關鍵字修飾的方法、成員。當然在正常業務中是建議不使用,比較反射類已經摒棄了封裝的概念。

本章講解反射類的使用及Laravel對反射的使用。

反射

反射類是PHP內部類,無需加載即可使用,你可以通過實例化 ReflectionClass 類去使用它。

方法

這里列舉下PHP反射類常用的方法

方法名 注釋
ReflectionClass::getConstant 獲取定義過的一個常量
ReflectionClass::getConstants 獲取一組常量
ReflectionClass::getConstructor 獲取類的構造函數
ReflectionClass::getDefaultProperties 獲取默認屬性
ReflectionClass::getDocComment 獲取文檔注釋
ReflectionClass::getEndLine 獲取最后一行的行數
ReflectionClass::getFileName 獲取定義類的文件名
ReflectionClass::getInterfaceNames 獲取接口(interface)名稱
ReflectionClass::getMethods 獲取方法的數組
ReflectionClass::getModifiers 獲取類的修飾符
ReflectionClass::getName 獲取類名
ReflectionClass::getNamespaceName 獲取命名空間的名稱
ReflectionClass::getParentClass 獲取父類

等等等等.... 所有關于類的方法、屬性及其繼承的父類、實現的接口都可以查詢到。
詳細文檔請參考官網: http://php.net/manual/zh/class.reflectionclass.php

栗子

?php
 namespace A\B;
 
 class Foo { }
 
 $function = new \ReflectionClass('stdClass');
 
 var_dump($function->inNamespace());
 var_dump($function->getName());
 var_dump($function->getNamespaceName());
 var_dump($function->getShortName());
 
 $function = new \ReflectionClass('A\\B\\Foo');
 
 var_dump($function->inNamespace());
 var_dump($function->getName());
 var_dump($function->getNamespaceName());
 var_dump($function->getShortName());
?>

輸出結果

bool(false)
string(8) "stdClass"
string(0) ""
string(8) "stdClass"

bool(true)
string(7) "A\B\Foo"
string(3) "A\B"
string(3) "Foo"

Laravel

Laravel在實現服務容器加載時使用了反射類。現在我們開啟“解刨”模式

入口文件

index.php

$app = require_once __DIR__.'/../bootstrap/app.php';

/*
|--------------------------------------------------------------------------
| Run The Application
|--------------------------------------------------------------------------
|
| Once we have the application, we can handle the incoming request
| through the kernel, and send the associated response back to
| the client's browser allowing them to enjoy the creative
| and wonderful application we have prepared for them.
|
*/

$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);

$response = $kernel->handle(
 $request = Illuminate\Http\Request::capture()
);

$response->send();

$kernel->terminate($request, $response);

是引用語句發生的下一行調用了make方法。各位很清楚,make方法用于解析類,所有make方法的實現一定是在引用的文件內。

bootstrap\app.php

$app = new Illuminate\Foundation\Application(
 realpath(__DIR__.'/../')
);

laravel開始加載它的核心類,所有的實現從 Illuminate\Foundation\Application 開始。

Illuminate\Foundation\Application

public function make($abstract, array $parameters = [])
{
  $abstract = $this->getAlias($abstract);

  if (isset($this->deferredServices[$abstract])  ! isset($this->instances[$abstract])) {
   $this->loadDeferredProvider($abstract);
  }

  return parent::make($abstract, $parameters);
}

在核心類中你可能準確的查找到make方法的存在,它加載了服務提供者隨后調用了父類的方法make,要知道作為獨立的模塊 “服務容器”是絕對不能寫在核心類的。懂點設計模式的都很清楚。

Illuminate\Container\Container

$api = $this->app->make('HelpSpot\API',['id'=>1]); 為例來講解

// 真正的make方法,它直接調用了resolve繼續去實現make的功能
// $abstract = 'HelpSpot\API'
public function make($abstract, array $parameters = [])
{
 // $abstract = 'HelpSpot\API'
 return $this->resolve($abstract, $parameters);
}

...

protected function resolve($abstract, $parameters = [])
{
 ...
 // 判斷是否可以合理反射
 // $abstract = 'HelpSpot\API'
 if ($this->isBuildable($concrete, $abstract)) {
  // 實例化具體實例 (實際并不是實例化,而是通過反射“解刨”了)
  $object = $this->build($concrete);
 } else {
  $object = $this->make($concrete);
 }
 ...
}

public function build($concrete)
{
  // $concrete = 'HelpSpot\API'
  if ($concrete instanceof Closure) {
   return $concrete($this, $this->getLastParameterOverride());
  }
  // 實例化反射類
  $reflector = new ReflectionClass($concrete);

  // 檢查類是否可實例化
  if (! $reflector->isInstantiable()) {
   return $this->notInstantiable($concrete);
  }

  $this->buildStack[] = $concrete;

  // 獲取類的構造函數
  $constructor = $reflector->getConstructor();
  
  if (is_null($constructor)) {
   array_pop($this->buildStack);

   return new $concrete;
  }

  $dependencies = $constructor->getParameters();

  $instances = $this->resolveDependencies(
   $dependencies
  );

  array_pop($this->buildStack);
   
  // 從給出的參數創建一個新的類實例。
  return $reflector->newInstanceArgs($instances);
}

可見一個服務容器就加載成功了。

更多關于Laravel相關內容感興趣的讀者可查看本站專題:《Laravel框架入門與進階教程》、《php優秀開發框架總結》、《php面向對象程序設計入門教程》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》

希望本文所述對大家基于Laravel框架的PHP程序設計有所幫助。

您可能感興趣的文章:
  • Laravel框架源碼解析之模型Model原理與用法解析
  • Laravel框架源碼解析之入口文件原理分析
  • Laravel 框架控制器 Controller原理與用法實例分析
  • Laravel框架數據庫CURD操作、連貫操作總結
  • PHP開發框架Laravel數據庫操作方法總結
  • Laravel框架中擴展函數、擴展自定義類的方法
  • Laravel框架路由配置總結、設置技巧大全
  • Laravel 5 框架入門(一)
  • Laravel 5框架學習之數據庫遷移(Migrations)
  • Laravel 5框架學習之向視圖傳送數據
  • Laravel 5框架學習之用戶認證
  • Laravel框架集合用法實例淺析

標簽:平頂山 黃山 隴南 河南 唐山 武漢 通遼 南通

巨人網絡通訊聲明:本文標題《Laravel框架源碼解析之反射的使用詳解》,本文關鍵詞  Laravel,框架,源碼,解析,之,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Laravel框架源碼解析之反射的使用詳解》相關的同類信息!
  • 本頁收集關于Laravel框架源碼解析之反射的使用詳解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    成人污污视频在线观看| 亚洲欧美国产毛片在线| 国产福利一区在线观看| 91精品国产综合久久精品app| 一区二区三区产品免费精品久久75| 日韩av在线发布| 精品国产91乱码一区二区三区 | 成年人国产精品| 久久99久久99精品免视看婷婷 | 日韩三级中文字幕| 亚洲天堂2016| 丁香五精品蜜臀久久久久99网站| 日韩一区二区在线看| 一区二区在线观看不卡| 高清不卡在线观看| 日本一二三不卡| 2020国产精品自拍| 国内精品久久久久影院一蜜桃| 欧美日韩视频在线第一区| 中文字幕在线不卡一区| 不卡的电影网站| 国产精品护士白丝一区av| 波多野结衣中文一区| 中文字幕一区三区| 国产91高潮流白浆在线麻豆| 精品成人一区二区三区四区| 久久国产麻豆精品| 久久嫩草精品久久久久| 福利91精品一区二区三区| 欧美经典三级视频一区二区三区| 国产成人自拍网| 亚洲精品一区二区在线观看| 经典三级一区二区| 国产精品久久久久aaaa| 91在线码无精品| 午夜精品福利在线| 日韩免费高清电影| 国模大尺度一区二区三区| 欧美国产日韩a欧美在线观看| av成人免费在线观看| 一二三区精品福利视频| 日韩欧美一区二区在线视频| 国产一区二三区好的| 精品国产免费人成在线观看| 成人免费毛片高清视频| 亚洲一区二区三区不卡国产欧美| 欧美一区在线视频| www.亚洲精品| 亚洲成精国产精品女| 欧美一区永久视频免费观看| 成人黄色软件下载| 亚洲高清免费观看 | 不卡影院免费观看| 亚洲综合激情另类小说区| 精品福利一区二区三区免费视频| 99re8在线精品视频免费播放| 日韩1区2区日韩1区2区| 中文字幕精品综合| 5858s免费视频成人| 99久久婷婷国产综合精品| 免费观看在线综合色| 亚洲乱码中文字幕| 久久亚洲综合色| 91免费看视频| 日本va欧美va欧美va精品| 久久久久久久久久久久电影| 欧美色手机在线观看| 久久国产尿小便嘘嘘| 亚洲成a人片在线观看中文| 欧美激情综合网| 日韩免费观看2025年上映的电影| 韩日精品视频一区| 亚洲欧美日韩久久| 久久夜色精品国产噜噜av| 欧美乱妇20p| 波波电影院一区二区三区| 青青草国产精品亚洲专区无| 最新日韩在线视频| 26uuu精品一区二区| 本田岬高潮一区二区三区| 麻豆视频一区二区| 亚洲一区在线电影| 欧美成人精品3d动漫h| 欧美日韩成人综合天天影院| 福利电影一区二区| 国产日韩一级二级三级| 欧洲av一区二区嗯嗯嗯啊| av中文字幕一区| 美女www一区二区| 亚洲一区二区三区中文字幕在线| 久久久久久亚洲综合| 日韩三级伦理片妻子的秘密按摩| av影院午夜一区| 国产成人在线影院 | 欧美一区二区在线视频| 岛国av在线一区| 欧美日韩激情一区二区| 91欧美激情一区二区三区成人| 成人动漫在线一区| 久久综合中文字幕| 在线亚洲欧美专区二区| 在线一区二区三区| 国模少妇一区二区三区| 亚洲欧洲精品一区二区三区不卡| 91麻豆精品国产91久久久使用方法 | k8久久久一区二区三区| 麻豆精品一区二区综合av| 日韩欧美的一区| 欧美色综合天天久久综合精品| 97精品电影院| 国产成人精品网址| www.欧美.com| 国产激情视频一区二区三区欧美 | 日韩一区二区视频| 日韩欧美一区在线| 911精品产国品一二三产区| 亚洲国产电影在线观看| 精品粉嫩aⅴ一区二区三区四区| 91精品国产高清一区二区三区蜜臀 | 麻豆91精品视频| 香港成人在线视频| 日本视频一区二区三区| 五月天亚洲精品| 日本成人超碰在线观看| 亚洲免费观看高清在线观看| 三级亚洲高清视频| 麻豆国产91在线播放| 中文字幕第一区二区| 国产精品乱码一区二区三区软件| 欧美国产日产图区| 91麻豆国产在线观看| 91精品国产麻豆国产自产在线 | 亚洲3atv精品一区二区三区| 日韩一级大片在线观看| 久久精品视频一区二区三区| 中文字幕日韩av资源站| 日韩一区二区三区精品视频| 欧美三级蜜桃2在线观看| 欧美一级黄色片| 在线电影一区二区三区| 久久久久久久久久久久久久久99| www精品美女久久久tv| 91在线精品一区二区三区| 91福利国产精品| 欧美视频在线观看一区二区| 亚洲自拍与偷拍| 亚洲五码中文字幕| 狠狠色丁香婷婷综合| www.色精品| 欧美在线999| 欧美电影免费观看高清完整版在线观看 | 一二三四社区欧美黄| 日日夜夜一区二区| 亚洲国产日韩在线一区模特| 美美哒免费高清在线观看视频一区二区 | 国产精品久久久久久久午夜片| 成人丝袜高跟foot| 亚洲最新视频在线播放| 亚洲色图19p| 偷窥国产亚洲免费视频| 亚洲bdsm女犯bdsm网站| 天堂午夜影视日韩欧美一区二区| 青青草国产精品97视觉盛宴| 亚洲电影视频在线| 中文字幕中文字幕一区二区| 一区二区三区在线观看网站| 日韩精品一区二区三区视频| 成人免费视频免费观看| 色悠久久久久综合欧美99| 一本一道久久a久久精品综合蜜臀| 日韩精品一区二区三区视频播放 | 欧美视频中文字幕| 久久青草欧美一区二区三区| 精品99一区二区三区| 一区二区在线观看av| 日本va欧美va精品发布| 寂寞少妇一区二区三区| 欧美久久久久中文字幕| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 久久亚洲精品国产精品紫薇| 亚洲国产精品人人做人人爽| 国产美女娇喘av呻吟久久| 欧美日韩国产综合久久| 亚洲女性喷水在线观看一区| 亚洲午夜激情av| 蜜桃av一区二区在线观看| 日本高清不卡aⅴ免费网站| 2020日本不卡一区二区视频| 亚洲欧美日韩在线| 北条麻妃一区二区三区| 久久久精品国产免费观看同学| 亚洲国产日韩av| 欧美性生交片4| 欧美一级专区免费大片| 日韩电影免费在线| 91麻豆精品国产91久久久更新时间| 国产精品久久久久久久久快鸭 | 国产精品国产精品国产专区不蜜| 尤物在线观看一区| 日韩精品久久理论片|