Yii框架模拟组件调用注入示例


Posted in PHP onNovember 11, 2019

本文实例讲述了Yii框架模拟组件调用注入。分享给大家供大家参考,具体如下:

yii 中组件只有在被调用的时候才会被实例化,且在当前请求中之后调用该组件只会使用上一次实例化的实例,不会重新生成该实例。

'components'  => array(
  '组件调用名'  =>  '组件调用命名空间',
  '组件调用名'  => array(
      'class' => '组件调用命名空间'
  );
  '组件调用名'  => function(){
    return new '组件调用命名空间';
  }
)

一个类似的小组件,可以实现上述功能。方便我们存储服务功能组件。

<?php
namespace app\components\Services;
/**
 * 自定义服务层调用组件
 * 支持 的实例模式只有yii模式的string 和 array 模式
 * 例子
 * services => array(
 *   'customService' => array(
*        'class' => 'app\components\Custom\Custom',
*        'name' => '我是勇哥'
*      ),
 * )
 */
class Services
{
  private $dataObj = array();
  private $classes = array();
  public function __set($name,$value)
  {
    $this->classes[$name] = $value;
  }
  public function __get($name)
  {
    if(!isset($this->dataObj[$name]) || $this->dataObj[$name] == null)
    {
      $classInfo = $this->classes[$name];
      $this->dataObj[$name] = is_array($classInfo) ? (new $classInfo['class']) : (new $classInfo);
      if(is_array($classInfo))
        foreach($classInfo as $a=>$b)
          if($a != 'class')
            $this->dataObj[$name]->$a = $b;
    }
    return $this->dataObj[$name];
  }
}

web.php

'components'=>array(
  'services' => array(
    'class'  =>  'app\components\Services\Services',
    //自定义服务 custom1
    'custom1Service' => array(
      'class' => 'app\services\Custom1\Custom1',
      //需要注入的属性值
      'name'  => '我是勇哥',
      'age'  => 22
    ),
    //自定义服务 custom2
    'custom2Service' => array(
      'class' => 'app\services\Custom2\Custom2',
      //需要注入的属性值
      'name'  => '我是勇哥',
      'age'  => 22
    ),
  )
)

控制层调用

<?php
namespace app\controllers\home;
use Yii;
use yii\web\Controller;
class IndexController extends Controller
{
  public function actionIndex()
  {
    echo Yii::$app->services->custom1Service->name;
  }
}

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

PHP 相关文章推荐
php.ini 中文版
Oct 28 PHP
php+mysql写的简单留言本实例代码
Jul 25 PHP
php.ini-dist 和 php.ini-recommended 的区别介绍(方便开发与安全的朋友)
Jul 01 PHP
php定时删除文件夹下文件(清理缓存文件)
Jan 23 PHP
浅析PHP 按位与或 (^ 、&amp;)
Jun 21 PHP
php中的boolean(布尔)类型详解
Oct 28 PHP
PHP获取当前页面URL函数实例
Oct 22 PHP
PHP进制转换实例分析(2,8,16,36,64进制至10进制相互转换)
Feb 04 PHP
php中上传文件的的解决方案
Sep 25 PHP
PHP与Perl之间知识点区别整理
Mar 19 PHP
php实现简单的守护进程创建、开启与关闭操作
Aug 13 PHP
在Laravel中使用MongoDB的方法示例
Nov 11 #PHP
PHP使用递归按层级查找数据的方法
Nov 10 #PHP
php和js实现根据子网掩码和ip计算子网功能示例
Nov 09 #PHP
PHP发送邮件确认验证注册功能示例【修改别人邮件类】
Nov 09 #PHP
php进程(线程)通信基础之System V共享内存简单实例分析
Nov 09 #PHP
PHP多进程简单实例小结
Nov 09 #PHP
PHPUnit + Laravel单元测试常用技能
Nov 06 #PHP
You might like
不用mod_rewrite直接用php实现伪静态化页面代码
2008/10/04 PHP
Yii框架调试心得--在页面输出执行sql语句
2014/12/25 PHP
php+mysql实现简单的增删改查功能
2015/07/13 PHP
Thinkphp框架开发移动端接口(2)
2016/08/18 PHP
些很实用且必用的小脚本代码
2006/06/26 Javascript
Javascript 遮罩层和加载效果代码
2013/08/01 Javascript
node.js中的buffer.toJSON方法使用说明
2014/12/14 Javascript
在HTML中插入JavaScript代码的示例
2015/06/03 Javascript
BootStrap和jQuery相结合实现可编辑表格
2016/04/21 Javascript
Jquery EasyUI实现treegrid上显示checkbox并取选定值的方法
2016/04/29 Javascript
利用JavaScript判断浏览器类型及版本
2016/08/23 Javascript
JavaScript简单拖拽效果(1)
2017/05/17 Javascript
JS使用贪心算法解决找零问题示例
2017/11/27 Javascript
JavaScript时间与时间戳的转换操作实例分析
2018/12/07 Javascript
vue-cli3添加模式配置多环境变量的方法
2019/06/05 Javascript
在vue中利用全局路由钩子给url统一添加公共参数的例子
2019/11/01 Javascript
js实现鼠标拖拽div左右滑动
2020/01/15 Javascript
JavaScript写个贪吃蛇小游戏(超详细)
2020/03/17 Javascript
JavaScript 链表定义与使用方法示例
2020/04/28 Javascript
[42:00]完美世界DOTA2联赛PWL S3 Phoenix vs INK ICE 第一场 12.13
2020/12/17 DOTA
每天迁移MySQL历史数据到历史库Python脚本
2018/04/13 Python
在Mac中PyCharm配置python Anaconda环境过程图解
2020/03/11 Python
带你学习Python如何实现回归树模型
2020/07/16 Python
Python图像处理二值化方法实例汇总
2020/07/24 Python
Python xlwings插入Excel图片的实现方法
2021/02/26 Python
HTML5拖放API实现自动生成相框功能
2020/04/07 HTML / CSS
英国最大的化装舞会服装网站:Fancydress.com
2017/08/15 全球购物
LORAC官网:美国彩妆品牌
2019/08/27 全球购物
技术经理的自我评价范文
2013/12/03 职场文书
优秀医生事迹材料
2014/02/12 职场文书
光信息科学与技术专业职业生涯规划
2014/03/13 职场文书
五年级学生评语
2014/04/22 职场文书
义诊活动通知
2015/04/24 职场文书
活动总结模板大全
2015/05/11 职场文书
开学第一天的感想
2015/08/10 职场文书
Python源码解析之List
2021/05/21 Python