评论

收藏

[PHP] Yii框架模拟组件调用注入示例

开发技术 开发技术 发布于:2021-11-08 11:53 | 阅读数:304 | 评论:0

这篇文章主要介绍了Yii框架模拟组件调用注入,结合实例形式分析了Yii框架存储服务功能组件与调用相关操作技巧,需要的朋友可以参考下
本文实例讲述了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程序设计有所帮助。
原文链接:https://blog.csdn.net/u014559227/article/details/77877397

关注下面的标签,发现更多相似文章