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 相关文章推荐
第十三节 对象串行化 [13]
Oct 09 PHP
PHP 配置文件中open_basedir选项作用
Jul 19 PHP
php绝对路径与相对路径之间关系的的分析
Mar 03 PHP
phpmyadmin安装时提示:Warning: require_once(./libraries/common.inc.php)错误解决办法
Aug 18 PHP
php 文件缓存函数
Oct 08 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
Nov 07 PHP
php校验表单检测字段是否为空的方法
Mar 20 PHP
列举PHP的Yii 2框架的开发优势
Jul 03 PHP
Zend Framework教程之Application和Bootstrap用法详解
Mar 10 PHP
php传值方式和ajax的验证功能
Mar 27 PHP
PHP实现基于栈的后缀表达式求值功能
Nov 10 PHP
PHP实现chrome表单请求数据转换为接口使用的json数据
Mar 04 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
PHP中获取文件扩展名的N种方法小结
2012/02/27 PHP
php session劫持和防范的方法
2013/11/12 PHP
PHP四大安全策略
2014/03/12 PHP
PHP 结合 Boostrap 结合 js 实现学生列表删除编辑及搜索功能
2019/05/21 PHP
jquery插件制作教程 txtHover
2012/08/17 Javascript
js跨浏览器实现将字符串转化为xml对象的方法
2013/09/25 Javascript
Android中的jQuery:AQuery简介
2014/05/06 Javascript
探讨JavaScript标签位置的存放与功能有无关系
2016/01/15 Javascript
animate 实现滑动切换效果【实例代码】
2016/05/05 Javascript
Avalon中文长字符截取、关键字符隐藏、自定义过滤器
2016/05/18 Javascript
jQueryUI Datepicker组件设置日期高亮
2016/10/13 Javascript
Swiper实现轮播图效果
2017/07/03 Javascript
详解React-Native解决键盘遮挡问题(Keyboard遮挡问题)
2017/07/13 Javascript
ionic3实战教程之随机布局瀑布流的实现方法
2017/12/28 Javascript
解决element-ui中下拉菜单子选项click事件不触发的问题
2018/08/22 Javascript
微信小程序的mpvue框架快速上手指南
2019/05/15 Javascript
layui 根据后台数据动态创建下拉框并同时默认选中的实例
2019/09/02 Javascript
vue中nextTick用法实例
2019/09/11 Javascript
JavaScript实现猜数字游戏
2020/05/20 Javascript
python元组操作实例解析
2014/09/23 Python
Python的Flask开发框架简单上手笔记
2015/11/16 Python
Python中的with语句与上下文管理器学习总结
2016/06/28 Python
使用Python生成XML的方法实例
2017/03/21 Python
详解在Python中使用Torchmoji将文本转换为表情符号
2020/07/27 Python
利用html5 file api读取本地文件示例(如图片、PDF等)
2018/03/07 HTML / CSS
房地产广告词大全
2014/03/19 职场文书
企业精细化管理实施方案
2014/03/23 职场文书
2014年党员公开承诺书范文
2014/03/28 职场文书
小学班级口号
2014/06/09 职场文书
2014年入党积极分子学习三中全会思想汇报
2014/09/13 职场文书
办理收楼委托书范本
2014/10/09 职场文书
社保缴纳证明申请书
2014/11/03 职场文书
2016自主招生教师推荐信范文
2015/03/23 职场文书
2015年采购员工作总结
2015/04/27 职场文书
安全知识竞赛主持词
2015/06/30 职场文书
2019最新版劳务派遣管理制度
2019/08/16 职场文书