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 相关文章推荐
怎样在UNIX系统下安装php3
Oct 09 PHP
用PHP伪造referer突破网盘禁止外连的代码
Jun 15 PHP
整理的一些实用WordPress后台MySQL操作命令
Jan 07 PHP
PHP5中Cookie与 Session使用详解
Apr 30 PHP
php弹出对话框实现重定向代码
Jan 23 PHP
Zend Framework实现留言本分页功能(附demo源码下载)
Mar 22 PHP
Apache PHP MySql安装配置图文教程
Aug 27 PHP
PHP简单检测网址是否能够正常打开的方法
Sep 04 PHP
PHP查看SSL证书信息的方法
Sep 22 PHP
PHP PDOStatement::setAttribute讲解
Feb 01 PHP
thinkphp5+layui实现的分页样式示例
Oct 08 PHP
对laravel的csrf 防御机制详解,及form中csrf_token()的存在介绍
Oct 24 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/06 新手入门
NT IIS下用ODBC连接数据库
2006/10/09 PHP
PHP Memcached + APC + 文件缓存封装实现代码
2010/03/11 PHP
Netbeans 8.2与PHP相关的新特性介绍
2016/10/08 PHP
浅析php中array_map和array_walk的使用对比
2016/11/20 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
2020/03/30 PHP
js判断是否为数组的函数: isArray()
2011/10/30 Javascript
JSON无限折叠菜单编写实例
2013/12/16 Javascript
JavaScript打印网页指定区域的例子
2014/05/03 Javascript
js使用post 方式打开新窗口
2015/02/26 Javascript
JavaScript生成随机数的4种自定义函数分享
2015/02/28 Javascript
canvas知识总结
2017/01/25 Javascript
javascript九宫格图片随机打乱位置的实现方法
2017/03/15 Javascript
angular或者js怎么确定选中ul中的哪几个li
2017/08/16 Javascript
Vue异步组件处理路由组件加载状态的解决方案
2018/09/07 Javascript
Vue执行方法,方法获取data值,设置data值,方法传值操作
2020/08/05 Javascript
Vue Elenent实现表格相同数据列合并
2020/11/30 Vue.js
[32:47]完美世界DOTA2联赛 GXR vs IO 第二场 11.07
2020/11/09 DOTA
go和python调用其它程序并得到程序输出
2014/02/10 Python
在Django的上下文中设置变量的方法
2015/07/20 Python
Python编程实现数学运算求一元二次方程的实根算法示例
2017/04/02 Python
ActiveMQ:使用Python访问ActiveMQ的方法
2019/01/30 Python
在OpenCV里使用特征匹配和单映射变换的代码详解
2019/10/23 Python
python写一个随机点名软件的实例
2019/11/28 Python
Python模块zipfile原理及使用方法详解
2020/08/04 Python
Sixt美国租车:高端豪华车型自驾体验
2017/09/02 全球购物
介绍一下JMS编程步骤
2015/09/22 面试题
教师应聘个人求职信
2013/12/10 职场文书
大班开学家长寄语
2014/04/04 职场文书
汽车运用工程专业求职信
2014/06/18 职场文书
公司活动总结范文
2014/07/01 职场文书
销售人员工作自我评价
2014/09/21 职场文书
学生夜不归宿检讨书
2014/09/23 职场文书
预备党员个人总结
2015/02/14 职场文书
2016年庆“七一”主题党日活动总结
2016/04/05 职场文书
Java tomcat手动配置servlet详解
2021/11/27 Java/Android