ryangjchandler / proxy
PHP中的代理方法和属性交互。
v0.1.0
2021-09-07 08:51 UTC
Requires
- php: ^8.0
Requires (Dev)
- brianium/paratest: ^6.2
- nunomaduro/collision: ^5.3
- pestphp/pest: ^1.18
- pestphp/pest-plugin-parallel: ^0.3.0
- phpstan/phpstan: ^0.12.98
- symfony/var-dumper: ^5.3
README
提供了一个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)。有关更多信息,请参阅许可文件。