dantleech / invoke
模拟命名参数
2.0.0
2021-05-01 17:22 UTC
Requires
- php: ^7.2||^8.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.13
- phpbench/phpbench: ^1.0
- phpstan/phpstan: ^0.12.0
- phpunit/phpunit: ^8.0
README
实用类,用于创建新类或使用命名参数调用方法。
PHP 目前不支持 命名参数,此实用工具提供了一种方便的模拟方法。
安装
使用 composer 需求
$ composer require dantleech/invoke
原因
有时参数可能来自数组,例如 "反序列化" 或实例化配置节点。
验证数组键的存在性、检查它们的类型等容易出错且耗时。
使用 Invoke::new(MyObject::class, $array)
,您可以直接将数组键映射到 __construct
参数。
此库将抛出描述性异常
- 如果存在额外的键。
- 如果缺少必要的键(即非空值)。
- 如果类型错误。
性能
Inoke::new(Class::class, [])
比直接调用 new Class()
慢约 50 倍,即每秒 260,000 次操作与约 13,000,000。
+--------------------------+---------+
| subject | mode |
+--------------------------+---------+
| benchInvokeNewClass | 3.720μs |
| benchInstantiateNewClass | 0.076μs |
+--------------------------+---------+
使用
实例化新类
<?php use DTL\Invoke\Invoke; class Foobar { public function __construct(string $arg1, string $arg2 = 'val1') { } } $foo = Invoke::new(Foobar::class, [ 'arg1' => 'value1' ]);
调用方法
<?php use DTL\Invoke\Invoke; class Foobar { // ... public function one(string $two) { } } $foo = Invoke::new(Foobar::class, [ 'arg1' => 'value1' ]); $bar= Invoke::method($foo, 'one', [ 'two' => 'bar' ]);
替代方案
nikolaposa/cascader 从构造参数定义创建 PHP 对象的实用工具。
贡献
欢迎提交拉取请求。对于重大更改,请先提交问题以讨论您想进行更改的内容。
请确保根据需要更新测试。