PHP中的代理方法和属性交互。

v0.1.0 2021-09-07 08:51 UTC

This package is auto-updated.

Last update: 2024-09-07 15:48:33 UTC


README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

提供了一个Proxy类,可用于拦截方法调用、属性访问和更新。

支持开发

如果您想支持该包的持续维护和开发,请考虑在GitHub上赞助我

安装

您可以通过Composer安装此包

composer require ryangjchandler/proxy

使用方法

此包提供了一个Proxy类,您可以使用它来包装任何对象。它允许您拦截属性访问和赋值,以及方法调用。

以下是一个示例

class Target
{
    public $firstName = 'Ryan';

    public $lastName = 'Chandler';
}

$proxy = new Proxy(new Target, [
    'get' => function (Target $target, string $property) {
        if ($property === 'fullName') {
            return $target->firstName . ' ' . $target->lastName;
        }

        return $target->{$property};
    },
]);

$proxy->fullName; // 'Ryan Chandler'

如果您想处理设置属性的值,您可以在处理程序数组中添加一个set键和回调函数。

$proxy = new Proxy(new Target, [
    'set' => function (Target $target, string $property, mixed $value) {
        if ($property === 'fullName') {
            $parts = explode(' ', $value);

            $target->firstName = $parts[0];
            $target->lastName = $parts[1];
        } else {
            $target->{$property} = $value;
        }
    },
]);

要拦截方法调用,请在数组中添加一个call键。

class Target
{
    public int $number = 10;
}

$proxy = new Proxy(new Target, [
    'call' => function (Target $target, string $method, array $arguments) {
        if ($method === 'toInt') {
            return $target->number;
        }

        return $target->{$method}(...$arguments);
    },
]);

$proxy->toInt(); // 10

测试

composer test

变更日志

有关最近更改的更多信息,请参阅变更日志

贡献

有关详细信息,请参阅贡献指南

安全漏洞

请参阅我们的安全策略以了解如何报告安全漏洞。

鸣谢

许可

MIT许可(MIT)。有关更多信息,请参阅许可文件