• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    php反射学习之依赖注入示例

    本文实例讲述了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+laravel依赖注入知识点总结
    • laravel框架中你所用到的依赖注入详解
    • 通过源码解析Laravel的依赖注入
    • Laravel实现构造函数自动依赖注入的方法
    • PHP依赖注入容器知识点浅析
    • php依赖注入知识点详解
    • php中的依赖注入实例详解
    • PHP依赖注入原理与用法分析
    • 详解Laravel框架的依赖注入功能
    上一篇:php反射学习之不用new方法实例化类操作示例
    下一篇:PHP 实现文件压缩解压操作的方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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