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 相关文章推荐
PHP4中实现动态代理
Oct 09 PHP
如何在WIN2K下安装PHP4.04
Oct 09 PHP
解决phpmyadmin中文乱码问题。。。
Jan 18 PHP
qq登录,新浪微博登录接口申请过程中遇到的问题
Jul 22 PHP
ThinkPHP调用common/common.php函数提示错误function undefined的解决方法
Aug 25 PHP
2014最热门的24个php类库汇总
Dec 18 PHP
php简单防盗链实现方法
Jul 29 PHP
Smarty高级应用之缓存操作技巧分析
May 14 PHP
Yii2 RESTful中api的使用及开发实例详解
Jul 06 PHP
Yii2框架类自动加载机制实例分析
May 02 PHP
PHP实现负载均衡session共享redis缓存操作示例
Aug 22 PHP
php中pcntl_fork详解
Apr 01 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
咖啡与水的关系
2021/03/03 冲泡冲煮
php,不用COM,生成excel文件
2006/10/09 PHP
PHP防注入安全代码
2008/04/09 PHP
php 智能404跳转代码,适合换域名没改变目录的网站
2010/06/04 PHP
解析PHP实现下载文件的两种方法
2013/07/05 PHP
PHP简单生成缩略图相册的方法
2015/07/29 PHP
四个PHP非常实用的功能
2015/09/29 PHP
PHP基于cookie与session统计网站访问量并输出显示的方法
2016/01/15 PHP
Jquery 动态生成表格示例代码
2013/12/24 Javascript
JS显示表格内指定行html代码的方法
2015/03/31 Javascript
理解javascript中的原型和原型链
2015/07/30 Javascript
js生成随机数的方法实例
2015/10/16 Javascript
浅谈javascript中replace()方法
2015/11/10 Javascript
javascript表达式和运算符详解
2017/02/07 Javascript
薪资那么高的Web前端必看书单
2017/10/13 Javascript
node下使用UglifyJS压缩合并JS文件的方法
2018/03/07 Javascript
解决vue2.0动态绑定图片src属性值初始化时报错的问题
2018/03/14 Javascript
微信小程序利用canvas 绘制幸运大转盘功能
2018/07/06 Javascript
vue异步axios获取的数据渲染到页面的方法
2018/08/09 Javascript
React中使用外部样式的3种方式(小结)
2019/05/28 Javascript
解决qrcode.js生成二维码时必须定义一个空div的问题
2020/07/09 Javascript
[54:05]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第一场 1月9日
2021/03/11 DOTA
Python登录注册验证功能实现
2018/06/18 Python
Django项目中添加ldap登陆认证功能的实现
2019/04/04 Python
使用matlab 判断两个矩阵是否相等的实例
2020/05/11 Python
英国女性时尚精品店:THE DRESSING ROOM
2018/05/23 全球购物
Hotter Shoes美国官网:英国最受欢迎的舒适鞋
2018/08/02 全球购物
Tod’s英国官方网站:意大利奢华手工制作手袋和鞋履
2019/03/15 全球购物
财务会计专业个人求职信范本
2014/01/08 职场文书
执行总经理岗位职责
2014/02/03 职场文书
军人违纪检讨书
2014/02/04 职场文书
洗手间标语
2014/06/23 职场文书
团日活动总结模板
2014/06/25 职场文书
教学改革问题查摆整改措施
2014/09/27 职场文书
走进科学观后感
2015/06/18 职场文书
学会感恩主题班会
2015/08/12 职场文书