dantleech/invoke

模拟命名参数

2.0.0 2021-05-01 17:22 UTC

This package is auto-updated.

Last update: 2024-08-29 05:12:51 UTC


README

Build Status

实用类,用于创建新类或使用命名参数调用方法。

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 对象的实用工具。

贡献

欢迎提交拉取请求。对于重大更改,请先提交问题以讨论您想进行更改的内容。

请确保根据需要更新测试。

许可

MIT