php反射学习之依赖注入示例

 更新时间:2019-06-25 06:01:07   作者:佚名   我要评论(0)

本文实例讲述了php反射学习之依赖注入。分享给大家供大家参考,具体如下:
先看代码:


<&#63;php
if (PHP_SAPI != 'cli') {
exit('Please run it in term

本文实例讲述了php反射学习之依赖注入。分享给大家供大家参考,具体如下:

先看代码:

<?php
if (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面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

您可能感兴趣的文章:

  • 理解php依赖注入和控制反转
  • PHP依赖注入原理与用法分析
  • PHP依赖注入(DI)和控制反转(IoC)详解
  • 对PHP依赖注入的理解实例分析
  • PHP基于反射机制实现自动依赖注入的方法详解
  • 浅析PHP类的反射来实现依赖注入过程
  • php中Ioc(控制反转)和Di(依赖注入)
  • PHP经典设计模式之依赖注入定义与用法详解
  • PHP控制反转(IOC)和依赖注入(DI)
  • PHP进阶学习之依赖注入与Ioc容器详解

相关文章

  • php反射学习之依赖注入示例

    php反射学习之依赖注入示例

    本文实例讲述了php反射学习之依赖注入。分享给大家供大家参考,具体如下: 先看代码: <&#63;php if (PHP_SAPI != 'cli') { exit('Please run it in term
    2019-06-25
  • php自定义排序uasort函数示例【二维数组按指定键值排序】

    php自定义排序uasort函数示例【二维数组按指定键值排序】

    本文实例讲述了php自定义排序uasort函数。分享给大家供大家参考,具体如下: 项目需要风险排序,按 I(安全)<L(低风险)<M(中风险)<H(高风险) 的级别来排序 由于
    2019-06-25
  • php设计模式之策略模式应用案例详解

    php设计模式之策略模式应用案例详解

    本文实例讲述了php设计模式之策略模式应用。分享给大家供大家参考,具体如下: 策略模式 定义: 策略模式定义一系列的算法,将每个算法封装起来,并让它们可以
    2019-06-25
  • PHP 实现文件压缩解压操作的方法

    PHP 实现文件压缩解压操作的方法

    在php中,有时我们需要使用到压缩文件操作,压缩文件可以节省磁盘空间;且压缩文件更小,便于网络传输,效率高,下面我们就来了解php的压缩解压相关操作 在PH
    2019-06-25
  • php设计模式之装饰模式应用案例详解

    php设计模式之装饰模式应用案例详解

    本文实例讲述了php设计模式之装饰模式。分享给大家供大家参考,具体如下: 介绍 装饰者模式(Decorator Pattern)允许你向一个现有的对象添加新的功能,同
    2019-06-25
  • yii2 在控制器中验证请求参数的使用方法

    yii2 在控制器中验证请求参数的使用方法

    写api接口时一般会在控制器中简单验证参数的正确性。 使用yii只带验证器(因为比较熟悉)实现有两种方式(效果都不佳)。 针对每个请求单独写个 Model , 定义
    2019-06-25
  • PHP Trait代码复用类与多继承实现方法详解

    PHP Trait代码复用类与多继承实现方法详解

    本文实例讲述了PHP Trait代码复用类与多继承实现方法。分享给大家供大家参考,具体如下: 前言 众所周知,一直以来PHP和很多语言一样是单继承的语言,但是常常
    2019-06-25
  • php常用字符串查找函数strstr()与strpos()实例分析

    php常用字符串查找函数strstr()与strpos()实例分析

    本文实例讲述了php常用字符串查找函数strstr()与strpos()。分享给大家供大家参考,具体如下: string strstr ( string $haystack , mixed $needle [, bool $b
    2019-06-25
  • PHP进阶学习之依赖注入与Ioc容器详解

    PHP进阶学习之依赖注入与Ioc容器详解

    本文实例讲述了PHP依赖注入与Ioc容器。分享给大家供大家参考,具体如下: 背景 在很多编程语言(例如java)开发中,程序员在某个类中需要依赖其它类的方法,则通
    2019-06-25
  • php用户名的密码加密更安全的方法

    php用户名的密码加密更安全的方法

    php中对用户密码的加密主要有两种方法,一种是利用md5加密,另一种是利用password_hash加密,两种方法中后一种的方法比前一种方法安全很多,几乎不能被黑客破
    2019-06-25

最新评论