门面 (Facade)

优质
小牛编辑
135浏览
2023-12-01

imi 现已支持门面 (Facade) 特性,支持为Bean对象提供一个静态调用方法的类。

示例

假设有这么一个类:

<?php
namespace Imi\Test\Component\Facade;

use Imi\Bean\Annotation\Bean;

/**
 * @Bean("FacadeA")
 */
class A
{
    public function add($a, $b)
    {
        return $a + $b;
    }

}

定义 Facade 类:

<?php
namespace Imi\Test\Component\Facade;

use Imi\Facade\BaseFacade;
use Imi\Facade\Annotation\Facade;

/**
 * @Facade("FacadeA")
 * @method mixed add($a, $b)
 */
abstract class FacadeA extends BaseFacade
{

}

继承 Imi\Facade\BaseFacade 类,然后使用@Facade注解类定义绑定到哪个类。

使用:

use Imi\Test\Component\Facade\FacadeA;
FacadeA::add(1, 2); // 3

@Facade 注解

class Facade extends Base
{
    /**
     * 只传一个参数时的参数名
     * @var string
     */
    protected $defaultFieldName = 'class';

    /**
     * 类名,支持 Bean 名
     *
     * @var string
     */
    public $class;

    /**
     * 为 true 时,使用当前请求上下文的 Bean 对象
     *
     * @var boolean
     */
    public $request = false;

    /**
     * 实例化参数
     *
     * @var array
     */
    public $args = [];

}

Facade 生成器

查看帮助:

imi generate/facade -h