yiisoft / proxy
proxy
1.0.5
2023-01-17 13:21 UTC
Requires
- php: ^8.0
- yiisoft/files: ^1.0.2|^2.0.0
Requires (Dev)
- phpunit/phpunit: ^9.5
- roave/infection-static-analysis-plugin: ^1.16
- spatie/phpunit-watcher: ^1.23
- vimeo/psalm: ^4.30|^5.4
This package is auto-updated.
Last update: 2024-09-20 11:08:10 UTC
README
Yii 代理
该包能够为类构建通用的代理,即允许拦截所有类方法调用。它在 yii-debug 包中用于收集服务的调用信息。
要求
- PHP 8.0 或更高版本。
安装
该包可以通过 Composer 安装。
composer require yiisoft/proxy
通用用法
自定义基础代理类
自定义基础代理类可以在每次方法调用期间执行某些操作。
use Yiisoft\Proxy\ObjectProxy; class MyProxy extends ObjectProxy { protected function afterCall(string $methodName, array $arguments, mixed $result, float $timeStart) : mixed { $result = parent::afterCall($methodName, $arguments, $result, $timeStart); $error = $this->getCurrentError(); // Use to track and handle errors. $time = microtime(true) - $timeStart; // Use to measure / log execution time. return $result; } }
此外,您还可以自定义新实例的创建等。请参阅 示例,这些示例位于 yii-debug 扩展中。
具有接口的类
有一个接口和实现它的类,代理可以创建如下所示
use Yiisoft\Proxy\ProxyManager; interface CarInterface { public function horsepower(): int; } class Car implements CarInterface { public function horsepower(): int { return 1; } } $path = sys_get_temp_dir(); $manager = new ProxyManager( // This is optional. The proxy can be created "on the fly" instead. But it's recommended to specify path to enable // caching. $path ); /** @var Car|MyProxy $object */ $object = $manager->createObjectProxy( CarInterface::class, MyProxy::class, // Custom base proxy class defined earlier. [new Car()] ); // Now you can call `Car` object methods through proxy the same as you would call it in original `Car` object. $object->horsepower(); // Outputs "1".
无接口的类
尽管不需要接口,但代理仍然可以以几乎相同的方式创建
use Yiisoft\Proxy\ProxyManager; class Car implements CarInterface { public function horsepower(): int { return 1; } } $path = sys_get_temp_dir(); $manager = new ProxyManager($path); /** @var Car|MyProxy $object */ $object = $manager->createObjectProxy( Car::class, // Pass class instead of interface here. MyProxy::class, [new Car()] );
代理类内容
以下是一个代理类内部的示例
class CarProxy extends MyProxy implements CarInterface { public function horsepower(): int { return $this->call('horsepower', []); } }
文档
如果您需要帮助或有问题,请访问 Yii 论坛,那里是一个很好的地方。您还可以查看其他 Yii 社区资源。
许可
Yii 代理是自由软件。它根据 BSD 许可证的条款发布。有关更多信息,请参阅 LICENSE
。
由 Yii 软件 维护。