国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

php反射學習之依賴注入示例

2024-05-05 00:09:39
字體:
來源:轉載
供稿:網友

本文實例講述了php反射學習之依賴注入。分享給大家供大家參考,具體如下:

先看代碼:

<?phpif (PHP_SAPI != 'cli') {  exit('Please run it in terminal!');}if ($argc < 3) {  exit('At least 2 arguments needed!');}$controller = ucfirst($argv[1]) . 'Controller';$action = 'action' . ucfirst($argv[2]);// 檢查類是否存在if (!class_exists($controller)) {  exit("Class $controller does not existed!");}// 獲取類的反射$reflector = new ReflectionClass($controller);// 檢查方法是否存在if (!$reflector->hasMethod($action)) {  exit("Method $action does not existed!");}// 取類的構造函數$constructor = $reflector->getConstructor();// 取構造函數的參數$parameters = $constructor->getParameters();// 遍歷參數foreach ($parameters as $key => $parameter) {  // 獲取參數聲明的類  $injector = new ReflectionClass($parameter->getClass()->name);  // 實例化參數聲明類并填入參數列表  $parameters[$key] = $injector->newInstance();}// 使用參數列表實例 controller 類$instance = $reflector->newInstanceArgs($parameters);// 執行$instance->$action();class HelloController{  private $model;  public function __construct(TestModel $model)  {    $this->model = $model;  }  public function actionWorld()  {    echo $this->model->property, PHP_EOL;  }}class TestModel{  public $property = 'property';}

(以上代碼非原創)將以上代碼保存為 run.php

運行方式,在終端下執行php run.php Hello World

可以看到,我們要執行 HelloController 下的 WorldAction,
HelloController 的構造函數需要一個 TestModel類型的對象,

通過php 反射,我們實現了, TestModel 對象的自動注入,

上面的例子類似于一個請求分發的過程,是路由請求的分發的一部分,假如我們要接收一個請求 地址例如: /Hello/World

意思是要執行 HelloController 下的 WorldAction 方法。

希望本文所述對大家PHP程序設計有所幫助。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 来凤县| 五原县| 镇江市| 海安县| 东明县| 平顶山市| 古田县| 海伦市| 富民县| 万年县| 久治县| 读书| 九寨沟县| 肥乡县| 青铜峡市| 福清市| 盖州市| 呼伦贝尔市| 德钦县| 新巴尔虎左旗| 新绛县| 孝感市| 平遥县| 福建省| 渭源县| 囊谦县| 承德县| 莲花县| 扬中市| 军事| 邛崃市| 泊头市| 集贤县| 故城县| 威信县| 灌云县| 浦江县| 定远县| 利辛县| 华容县| 民勤县|