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 相关文章推荐
简单易用的计数器(数据库)
Oct 09 PHP
加速XP搜索功能堪比vista
Mar 22 PHP
用PHP获取Google AJAX Search API 数据的代码
Mar 12 PHP
php发送post请求函数分享
Mar 06 PHP
ThinkPHP中使用Ueditor富文本编辑器
Sep 02 PHP
基于thinkPHP实现的微信自定义分享功能示例
Sep 23 PHP
php变量与数组相互转换的方法(extract与compact)
Dec 02 PHP
php简单生成一组与多组随机字符串的方法
May 09 PHP
PHP框架Laravel中实现supervisor执行异步进程的方法
Jun 07 PHP
php简单计算权重的方法示例【适合抽奖类应用】
Jun 10 PHP
PHP进阶学习之依赖注入与Ioc容器详解
Jun 19 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
Mar 30 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
BBS(php &amp; mysql)完整版(一)
2006/10/09 PHP
PHP的preg_match匹配字符串长度问题解决方法
2014/05/03 PHP
php防止sql注入的方法详解
2017/02/20 PHP
基于JavaScript实现仿京东图片轮播效果
2015/11/06 Javascript
实例详解jQuery结合GridView控件的使用方法
2016/01/04 Javascript
AngularJS基础 ng-keypress 指令简单示例
2016/08/02 Javascript
AngularJs Understanding the Controller Component
2016/09/02 Javascript
基于Vuejs框架实现翻页组件
2020/06/29 Javascript
微信小程序教程系列之设置标题栏和导航栏(7)
2020/06/29 Javascript
Javascript 实现匿名递归的实例代码
2017/05/25 Javascript
简单实现js放大镜效果
2017/07/24 Javascript
用 Vue.js 递归组件实现可折叠的树形菜单(demo)
2017/12/25 Javascript
浅析Vue中method与computed的区别
2018/03/06 Javascript
vuejs项目打包之后的首屏加载优化及打包之后出现的问题
2018/04/01 Javascript
Vuex,iView UI面包屑导航使用扩展详解
2019/11/04 Javascript
vue vant中picker组件的使用
2020/11/03 Javascript
解决vue项目打包上服务器显示404错误,本地没出错的问题
2020/11/03 Javascript
在Python的Django框架中simple-todo工具的简单使用
2015/05/30 Python
python实现分页效果
2017/10/25 Python
用pandas中的DataFrame时选取行或列的方法
2018/07/11 Python
用Python编写一个高效的端口扫描器的方法
2018/12/20 Python
安装好Pycharm后如何配置Python解释器简易教程
2019/06/28 Python
tensorflow安装成功import tensorflow 出现问题
2020/04/16 Python
HTTP状态码详解
2021/03/18 杂记
css3实现二维码扫描特效的示例
2020/10/29 HTML / CSS
来自美国主售篮球鞋的零售商店:KICKSUSA
2017/11/28 全球购物
手工制作的意大利太阳镜和光学元件:Illesteva
2019/01/19 全球购物
Book Depository美国:全球领先的专业网上书店之一
2019/08/14 全球购物
什么是数据库锁?Oracle中都有哪些类型的锁?
2015/08/21 面试题
最新党员的自我评价分享
2013/11/04 职场文书
拾金不昧的表扬信
2014/01/16 职场文书
税务职业生涯规划书范文
2014/09/16 职场文书
2014年工商所工作总结
2014/12/09 职场文书
教师党员承诺书2015
2015/01/21 职场文书
Golang表示枚举类型的详细讲解
2021/09/04 Golang
instantclient客户端 连接oracle数据库
2022/04/26 Oracle