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读注册表
Oct 09 PHP
NT IIS下用ODBC连接数据库
Oct 09 PHP
PHP 定界符 使用技巧
Jun 14 PHP
php5 图片验证码实现代码
Dec 11 PHP
php正则表达式使用的详细介绍
Apr 27 PHP
推荐一本PHP程序猿都应该拜读的书
Dec 31 PHP
smarty模板引擎之配置文件数据和保留数据
Mar 30 PHP
PHP面向对象编程之深入理解方法重载与方法覆盖(多态)
Dec 24 PHP
PHP中功能强大却很少使用的函数实例小结
Nov 10 PHP
PHP删除数组中特定元素的两种方法
Feb 28 PHP
详解PHP 二维数组排序保持键名不变
Mar 06 PHP
PHP设计模式之命令模式示例详解
Dec 20 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
超级实用的7个PHP代码片段分享
2012/01/05 PHP
php 使用GD库为页面增加水印示例代码
2014/03/24 PHP
PHP移动文件指针ftell()、fseek()、rewind()函数总结
2014/11/18 PHP
orm获取关联表里的属性值
2016/04/17 PHP
详解Laravel5.6 Passport实现Api接口认证
2018/07/27 PHP
tp5修改(实现即点即改)
2019/10/18 PHP
JS 添加网页桌面快捷方式的代码详细整理
2012/12/27 Javascript
document.forms[].submit()使用介绍
2014/02/19 Javascript
jQuery实现选中弹出窗口选择框内容后赋值给文本框的方法
2015/11/23 Javascript
实例解析jQuery中proxy()函数的用法
2016/05/24 Javascript
JS 调试中常见的报错问题解决方法
2017/05/20 Javascript
JavaScript封闭函数及常用内置对象示例
2019/05/13 Javascript
jQuery实现tab栏切换效果
2020/12/22 jQuery
vue watch监控对象的简单方法示例
2021/01/07 Vue.js
python的numpy模块安装不成功简单解决方法总结
2017/12/23 Python
详解python中的 is 操作符
2017/12/26 Python
Python Pandas找到缺失值的位置方法
2018/04/12 Python
python爬虫超时的处理的实例
2018/12/19 Python
python适合人工智能的理由和优势
2019/06/28 Python
Django为窗体加上防机器人的验证码功能过程解析
2019/08/14 Python
Django Haystack 全文检索与关键词高亮的实现
2020/02/17 Python
django实现将后台model对象转换成json对象并传递给前端jquery
2020/03/16 Python
Python 实现敏感目录扫描的示例代码
2020/05/21 Python
django数据模型中null和blank的区别说明
2020/09/02 Python
python实现数学模型(插值、拟合和微分方程)
2020/11/13 Python
CSS3的first-child选择器实战攻略
2016/04/28 HTML / CSS
查找廉价航班和发现新目的地:Kiwi.com
2019/02/25 全球购物
类如何去实现接口
2013/12/19 面试题
双语教学实施方案
2014/03/23 职场文书
公司经理聘任书
2014/03/29 职场文书
2014年教师政治学习材料
2014/06/02 职场文书
MySQL表的增删改查基础教程
2021/04/07 MySQL
go原生库的中bytes.Buffer用法
2021/04/25 Golang
阿里云服务器搭建Php+Apache运行环境的详细过程
2021/05/15 PHP
Mysql数据库索引面试题(程序员基础技能)
2021/05/31 MySQL
全新239军机修复记
2022/04/05 无线电