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 已经成熟
Dec 04 PHP
php网站来路获取代码(针对搜索引擎)
Jun 08 PHP
php数组的一些常见操作汇总
Jul 17 PHP
PHP 命令行工具 shell_exec, exec, passthru, system详细使用介绍
Sep 11 PHP
PHP empty函数报错解决办法
Mar 06 PHP
php筛选不存在的图片资源
Apr 28 PHP
PHP实现过滤掉非汉字字符只保留中文字符
Jun 04 PHP
Smarty最简单实现列表奇偶变色的方法
Jul 01 PHP
php session的锁和并发
Jan 22 PHP
Yii2.0预定义的别名功能小结
Jul 04 PHP
PHP强制转化的形式整理
May 22 PHP
php中数组最简单的使用方法
Dec 27 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 sprintf() 函数的应用(定义和用法)
2012/06/29 PHP
解析php中heredoc的使用方法
2013/06/17 PHP
PHP 关于访问控制的和运算符优先级介绍
2013/07/08 PHP
php格式化金额函数分享
2015/02/02 PHP
php 使用fopen函数创建、打开文件详解及实例代码
2016/09/24 PHP
php微信公众号开发(2)百度BAE搭建和数据库使用
2016/12/15 PHP
从面试题学习Javascript 面向对象(创建对象)
2012/03/30 Javascript
JavaScript 基础篇(一)
2012/03/30 Javascript
javascript之Partial Application学习
2013/01/10 Javascript
如何实现textarea里的不同文本显示不同颜色
2014/01/20 Javascript
键盘上一张下一张兼容IE/google/firefox等浏览器
2014/01/28 Javascript
实例讲解JS中数组Array的操作方法
2014/05/09 Javascript
JS键盘版计算器的制作方法
2016/12/03 Javascript
js选项卡的制作方法
2017/01/23 Javascript
让nodeJS支持ES6的词法----babel的安装和使用方法
2017/07/31 NodeJs
vue综合组件间的通信详解
2017/11/06 Javascript
详解使用element-ui table组件的筛选功能的一个小坑
2018/11/02 Javascript
使用vue自定义指令开发表单验证插件validate.js
2019/05/23 Javascript
基于Vue实现电商SKU组合算法问题
2019/05/29 Javascript
jQuery zTree如何改变指定节点文本样式
2020/10/16 jQuery
在vue中获取wangeditor的html和text的操作
2020/10/23 Javascript
python对指定目录下文件进行批量重命名的方法
2015/04/18 Python
python flask实现分页效果
2017/06/27 Python
基于python3 OpenCV3实现静态图片人脸识别
2018/05/25 Python
python使用minimax算法实现五子棋
2019/07/29 Python
如何在mac版pycharm选择python版本
2020/07/21 Python
基于Python模拟浏览器发送http请求
2020/11/06 Python
Speedo速比涛中国官方网站:全球领先泳装运动品牌
2018/04/24 全球购物
销售会计岗位职责
2014/03/15 职场文书
篮球比赛策划方案
2014/06/05 职场文书
群众路线领导干部个人对照检查材料(集锦)
2014/09/23 职场文书
校园环境卫生倡议书
2015/04/29 职场文书
2016年禁毒宣传活动总结
2016/04/05 职场文书
导游词之韩国济州岛
2019/10/28 职场文书
PyTorch中的torch.cat简单介绍
2022/03/17 Python
CentOS7环境下MySQL8常用命令小结
2022/06/10 Servers