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自定义函数返回多个值
Nov 26 PHP
基于HTTP长连接的&quot;服务器推&quot;技术的php 简易聊天室
Oct 31 PHP
介绍一些PHP判断变量的函数
Apr 24 PHP
php实现的获取网站备案信息查询代码(360)
Sep 23 PHP
学习php设计模式 php实现抽象工厂模式
Dec 07 PHP
php实现xml转换数组的方法示例
Feb 03 PHP
PHP用户注册邮件激活账户的实现代码
May 31 PHP
thinkPHP3.2.2框架行为扩展及demo示例
Jun 19 PHP
详解laravel安装使用Passport(Api认证)
Jul 27 PHP
php简单计算权重的方法示例【适合抽奖类应用】
Jun 10 PHP
laravel 错误处理,接口错误返回json代码
Oct 25 PHP
tp5使用layui实现多个图片上传(带附件选择)的方法实例
Nov 17 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 上传文件的方法(类)
2009/07/30 PHP
基于php在各种web服务器的运行模式详解
2013/06/03 PHP
php析构函数的简单使用说明
2015/08/24 PHP
Zend Framework分发器用法示例
2016/12/11 PHP
实例分析PHP将字符串转换成数字的方法
2019/01/27 PHP
laravel框架查询数据集转为数组的两种方法
2019/10/10 PHP
PJBlog插件 防刷新的在线播放器
2006/10/25 Javascript
用倒置滤镜把div倒置,再把table倒置。
2007/07/31 Javascript
javascript 有趣而诡异的数组
2009/04/06 Javascript
js 函数的执行环境和作用域链的深入解析
2009/11/01 Javascript
Jquery 模拟用户点击超链接或者按钮的方法
2013/10/25 Javascript
JS中的数组的sort方法使用示例
2014/01/22 Javascript
JS获取几种URL地址的方法小结
2014/02/26 Javascript
漫谈JS引擎的运行机制 你应该知道什么
2016/06/15 Javascript
详解Vue2.0 事件派发与接收
2017/09/05 Javascript
基于webpack 实用配置方法总结
2017/09/28 Javascript
js中document.write和document.writeln的区别
2018/03/11 Javascript
微信小程序自定义键盘 内部虚拟支付
2018/12/20 Javascript
python实现根据窗口标题调用窗口的方法
2015/03/13 Python
Python中的特殊语法:filter、map、reduce、lambda介绍
2015/04/14 Python
通过5个知识点轻松搞定Python的作用域
2016/09/09 Python
详解python string类型 bytes类型 bytearray类型
2017/12/16 Python
python3.x上post发送json数据
2018/03/04 Python
在Pycharm中执行scrapy命令的方法
2019/01/16 Python
python实现简单图片物体标注工具
2019/03/18 Python
Selenium alert 弹窗处理的示例代码
2020/08/06 Python
外企C语言笔试题
2013/11/10 面试题
执行力心得体会
2013/12/31 职场文书
中国梦演讲稿范文
2014/08/28 职场文书
幼儿园三八妇女节活动总结
2015/02/06 职场文书
2015年维修工作总结
2015/04/25 职场文书
推广普通话主题班会
2015/08/17 职场文书
用 Python 元类的特性实现 ORM 框架
2021/05/19 Python
Maven学习----Maven安装与环境变量配置教程
2021/06/29 Java/Android
MySQL的表级锁,行级锁,排它锁和共享锁
2022/07/15 MySQL
CSS link与@import的区别和用法解析
2023/05/07 HTML / CSS