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 获取MySQL数据库里所有表的实现代码
Jul 13 PHP
解析php二分法查找数组是否包含某一元素
May 23 PHP
php根据身份证号码计算年龄的实例代码
Jan 18 PHP
php中cookie的使用方法
Mar 29 PHP
PHP中怎样防止SQL注入分析
Oct 23 PHP
PHP SESSION的增加、删除、修改、查看操作
Mar 20 PHP
php使用curl并发减少后端访问时间的方法分析
May 12 PHP
PHP操作mysql数据库分表的方法
Jun 09 PHP
利用php获得flv视频长度的实例代码
Oct 26 PHP
php实现的中秋博饼游戏之绘制骰子图案功能示例
Nov 06 PHP
PHP去除空数组且数组键名重置的讲解
Feb 28 PHP
PHP dirname简单使用代码实例
Nov 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
用Simple Excel导出xls实现方法
2012/12/06 PHP
PHP依赖倒置(Dependency Injection)代码实例
2014/10/11 PHP
一个经典实用的PHP图像处理类分享
2014/11/18 PHP
php如何获取文件的扩展名
2015/10/28 PHP
php微信公众号开发(3)php实现简单微信文本通讯
2016/12/15 PHP
php实现页面纯静态的实例代码
2017/06/21 PHP
详谈symfony window下的安装 安装时候出现的问题以及解决方法
2017/09/28 PHP
PHP cookie,session的使用与用户自动登录功能实现方法分析
2019/06/05 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
jquery如何实现锚点链接之间的平滑滚动
2013/12/02 Javascript
javascript解析json实例详解
2014/11/05 Javascript
png在IE6 下无法透明的解决方法汇总
2015/05/21 Javascript
jQuery实现的产品自动360度旋转展示特效源码分享
2015/08/21 Javascript
简单对比分析JavaScript中的apply,call与this的使用
2015/12/04 Javascript
解决WordPress使用CDN后博文无法评论的错误
2015/12/15 Javascript
Vue关于数据绑定出错解决办法
2017/05/15 Javascript
JS验证码实现代码
2017/09/14 Javascript
javascript中神奇的 Date对象小结
2017/10/12 Javascript
如何使node也支持从url加载一个module详解
2018/06/05 Javascript
详解微信小程序-canvas绘制文字实现自动换行
2019/04/26 Javascript
Angular+ionic实现折叠展开效果的示例代码
2020/07/29 Javascript
理解python多线程(python多线程简明教程)
2014/06/09 Python
用Python代码来解图片迷宫的方法整理
2015/04/02 Python
Python编程实现正则删除命令功能
2017/08/30 Python
Python OpenCV处理图像之图像像素点操作
2018/07/10 Python
对Python3中dict.keys()转换成list类型的方法详解
2019/02/03 Python
Python使用统计函数绘制简单图形实例代码
2019/05/15 Python
python实现UDP协议下的文件传输
2020/03/20 Python
python 如何设置守护进程
2020/10/29 Python
NFL欧洲商店(德国):NFL Europe Shop DE
2018/11/03 全球购物
文明教师事迹材料
2014/01/16 职场文书
2014年小学辅导员工作总结
2014/12/23 职场文书
党员评议自我评价
2015/03/03 职场文书
致青春观后感
2015/06/09 职场文书
2016年感恩教师节活动总结
2016/04/01 职场文书
vue+elementui 实现新增和修改共用一个弹框的完整代码
2021/06/08 Vue.js