noem / tiny-proxy

模块化服务容器

dev-main 2023-03-22 18:54 UTC

This package is auto-updated.

Last update: 2024-09-22 22:04:46 UTC


README

这是一个小工具,通过在运行时创建完全兼容的代理对象来帮助打破递归依赖链。它还可以用来延迟实例化逻辑,直到对象第一次被访问。它通过反射生成代理类的PHP代码(您可以通过eval或持久化/require来执行),这个类通过一个只返回实际对象的构造函数进行实例化。目前,此包只涵盖原始代码生成。磁盘缓存或创建面向对象的包装器由消费者负责。

示例

use Noem\TinyProxy\TinyProxy;

class User{

    public function __construct(public string $name, public int $age) {}

}

$php = TinyProxy::generateCode(User::class);
$proxyClassName = TinyProxy::proxyClassName(User::class)
eval($php);
$proxy = new $proxyClassName(fn() => new User('John', 42));

assert( $proxy instanceof User ); // true
$name = $proxy->name // 'John'