组件

组件是 MixPHP 的核心设计思想,整个框架都是由众多核心组件构成。

| 类 |
| --- |
| mix\base\Component |

通过用户可自定义组件、组件常驻内存这两个特性 MixPHP 能让用户将频繁调用的业务代码也可常驻于内存,达到更高的性能。

组件的核心特征:

  • 常驻内存
  • 事件

请谨慎注册太多组件,组件应该是全局使用的,使用频繁的。

创建一个组件

你只需继承 \mix\base\Component 类,就可以了,下面是一个范例:

<?php

namespace web\index\component;

use \mix\base\Component;

class MyComponent extends Component
{

    public $name;

    public function hello()
    {
        echo 'hello, ', $this->name;
    }

}

组件注册

所有组件都是在应用配置内的 components 字段内注册,下面是一个自定义组件的注册配置:

// 组件配置
'components'            => [

    'myComponent' => [
        // 类路径
        'class' => 'web\index\component\MyComponent',
        // 属性
        'name'  => '小花',
    ],

],
  • myComponent 是组件名称,调用时使用。
  • class 需要实例化类的命名空间。
  • 其他字段:都会在该类实例化后,导入为对象属性,key为属性名称,value为属性的值。

如何调用组件

在框架内任何位置都可使用,包括:控制器、模型、自定义类、第三方类。

\Mix::app()->myComponent->hello();

MixPHP 支持两种运行模式,不同模式下组件初始化的方式不同:

  • MixHttpd:全部组件在服务器启动时已经加载完成。
  • Apache/PHP-FPM:懒加载,只有调用 \Mix::app()->ComponentName 时组件才会加载。

组件事件

由于组件是常驻内存的,请求结束后不会销毁,而有些特殊情况下需要对请求周期内做一些初始化、数据清理方面的处理,所以 MixPHP 设计了事件机制,提供下面两个请求级别的事件函数:

  • onRequestStart:每次请求开始时触发,用于请求级别的初始化处理(代码内没有调用的组件不会触发)。
  • onRequestEnd:每次请求结束时触发,用于请求结束后组件数据清理(代码内没有调用的组件不会触发)。

使用时只需在组件内重写这几个事件方法即可。

// 请求开始事件
public function onRequestStart()
{
	parent::onRequestStart();
    // ...
}

// 请求结束事件
public function onRequestEnd()
{
	parent::onRequestEnd();
    // ...
}

继承的事件

由于\mix\base\Component 类继承了 mix\base\Object 对象基类,所以继承了三个事件:

  • onConstruct:构造事件,相当于 __construct 方法。
  • onInitialize:当组件完成构造事件并导入配置信息为属性后触发该事件,用于做一些初始化处理。
  • onDestruct:析构事件,相当于 __destruct 方法。

使用时只需在组件内重写这几个事件方法即可。

// 构造事件
public function onConstruct()
{
	parent::onConstruct();
    // ...
}

// 初始化事件
public function onInitialize()
{
	parent::onInitialize();
    // ...
}

// 析构事件
public function onDestruct()
{
	parent::onDestruct();
    // ...
}