decodelabs/veneer

自动静态外观

v0.11.6 2024-08-21 15:43 UTC

README

PHP from Packagist Latest Version Total Downloads GitHub Workflow Status PHPStan License

为您的PHP对象创建自动静态前端。

使用Veneer提供对常用功能的轻松访问,同时不牺牲可测试性。

DecodeLabs博客上获取新闻和更新。

安装

composer require decodelabs/veneer

使用方法

假设您有一个常用的库类,您经常使用

namespace Some\Random\Library
{
    // This is a library class you use regularly
    class MyThing {
        public function doAThing() {
            echo 'Done!';
        }
    }
}

您可以通过以下方式绑定一个静态、自动生成的界面:

namespace App\Setup
{
    // This is your environment setup code
    use DecodeLabs\Veneer;
    use Some\Random\Library\MyThing;
    use App\CoolThing;

    Veneer::register(
        MyThing::class, // active object class
        MyThingFrontage::class // frontage class
    );
}

namespace Some\Other\Code
{
    use App\CoolThing;

    // Your general userland code
    CoolThing::doAThing();
}

插件

遗憾的是,PHP仍然没有__getStatic(),所以我们必须在绑定时静态声明插件名称,但它们仍然有助于创建更广泛的接口。

在您的FacadeTarget上定义插件属性,带有Plugin属性,如果不需要立即加载,也可以包含LazyLoad属性。

namespace My\Library
{
    use DecodeLabs\Veneer\Plugin;
    use DecodeLabs\Veneer\LazyLoad;

    class MyThing {

        #[Plugin]
        #[LazyLoad]
        public MyPlugin $plugin;
    }


    class MyPlugin
    {
        public function doAThing(): string {
            return 'Hello from plugin1';
        }
    }
}

namespace Some\Other\Code
{
    use My\Library\MyThing;

    MyThing::$plugin->doAThing(); // Hello from plugin1
}

注意,如果您的目标类有一个带有必需参数的构造函数,您需要将decodelabs/slingshot添加到您的项目中,以便Veneer可以实例化它。

许可

Veneer采用MIT许可。有关完整许可文本,请参阅LICENSE