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的输入输出流
Feb 14 PHP
php Http_Template_IT类库进行模板替换
Mar 19 PHP
使用PHP获取网络文件的实现代码
Jan 01 PHP
PHP项目开发中最常用的自定义函数整理
Dec 02 PHP
在php和MySql中计算时间差的方法
Apr 22 PHP
简单的PHP缓存设计实现代码
Sep 30 PHP
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
Jun 17 PHP
ThinkPHP使用getlist方法实现数据搜索功能示例
May 08 PHP
php检测mysql表是否存在的方法小结
Jul 20 PHP
php生成毫秒时间戳的实例讲解
Sep 22 PHP
PHP7.3.10编译安装教程
Oct 08 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
PHP5中使用DOM控制XML实现代码
2010/05/07 PHP
php简单读取.vcf格式文件的方法示例
2017/09/02 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
2020/02/27 PHP
Jquery 滑入滑出效果实现代码
2010/03/27 Javascript
JavaScript 匿名函数(anonymous function)与闭包(closure)
2011/10/04 Javascript
jquery 多行文本框(textarea)高度变化
2013/07/03 Javascript
JS,Jquery获取select,dropdownlist,checkbox下拉列表框的值(示例代码)
2014/01/11 Javascript
Js与下拉列表处理问题解决
2014/02/13 Javascript
AngularJS模块管理问题的非常规处理方法
2015/04/29 Javascript
Jquery实现的简单轮播效果【附实例】
2016/04/19 Javascript
angularjs 源码解析之scope
2016/08/22 Javascript
React-router v4 路由配置方法小结
2017/08/08 Javascript
浅谈react+es6+webpack的基础配置
2017/08/09 Javascript
Vue框架之goods组件开发详解
2018/01/25 Javascript
ES6知识点整理之数组解构和字符串解构的应用示例
2019/04/17 Javascript
python中使用OpenCV进行人脸检测的例子
2014/04/18 Python
python使用PyGame绘制图像并保存为图片文件的方法
2015/04/24 Python
使用python读取txt文件的内容,并删除重复的行数方法
2018/04/18 Python
Python函数的参数常见分类与用法实例详解
2019/03/30 Python
Python Web静态服务器非堵塞模式实现方法示例
2019/11/21 Python
Python json读写方式和字典相互转化
2020/04/18 Python
css3实现信纸/同学录效果的示例代码
2018/12/11 HTML / CSS
Moss Bros官网:英国排名第一的西装店
2020/02/26 全球购物
牵手50新加坡:专为黄金岁月的单身人士而设的交友网站
2020/08/16 全球购物
HashMap和Hashtable的区别
2013/05/18 面试题
汽车维修与检测专业应届生求职信
2013/11/12 职场文书
教你打造完美的创业计划书
2014/01/06 职场文书
新闻编辑自荐书范文
2014/02/12 职场文书
公务员平时考核实施方案
2014/03/11 职场文书
给校长的一封建议书
2014/03/12 职场文书
安全生产月活动总结
2014/05/04 职场文书
物理课外活动总结
2014/08/27 职场文书
2015年大学生村官工作总结
2015/04/21 职场文书
2015年教师学期工作总结
2015/04/30 职场文书
小型企业的绩效考核制度模板
2019/11/21 职场文书
python自动计算图像数据集的RGB均值
2021/06/18 Python