sevavietl/overloaded-function

PHP函数重载包装器。

dev-master 2019-03-09 20:27 UTC

This package is not auto-updated.

Last update: 2024-09-26 01:38:26 UTC


README

Build Status Coverage Status License: MIT PHPStan

PHP实际上不支持函数重载,因为函数通过名称区分,但名称相同。这是一个帮助在PHP中模拟函数重载的类。

目录

通用用法

提供的函数案例是一个可调用对象数组,其中键是参数类型的签名。

1. 简单签名

参数签名是类型列表,由逗号分隔。

    $func = new OverloadedFunction([
        'integer, integer' => function ($a, $b) { return $a + $b; },
        'string, string' => function ($a, $b) { return $a . $b; }
    ]);

    var_dump($func(1, 1)) // => 2
    var_dump($func('1', '1')) // => '11'

2. 联合类型

有时你的参数需要属于一种类型,这种类型不仅实现了一个接口,还实现了多个接口。

    $func = new OverloadedFunction([
        'ArrayAccess&Countable' => function ($i) { return true; }
    ]);

    var_dump($func(new ArrayIterator)) // => bool(true)

3. 交集类型

有时你允许参数不是单一类型,而是多个类型。

    $func = new OverloadedFunction([
        'string|integer' => function ($i) { return true; }
    ]);

    var_dump($func(1)) // => bool(true)
    var_dump($func('1')) // => bool(true)

4. 带类型的数组

你可以限制你的参数为某些类型元素的数组。

    $func = new OverloadedFunction([
        'integer[]' => function ($arr) { return 'integer'; },
        'integer|string[]' => function ($arr) { return 'mixed'; }
    ]);

    var_dump($func([1, 2, 3])) // => string(7) "integer"
    var_dump($func([1, 2, '3'])) // => string(5) "mixed"

5. 可选参数

有时你可以允许参数是可选的。确保你为这些情况提供了默认值。

    $func = new OverloadedFunction([
        '?integer' => function ($i = 1) { return $i; }
    ]);

    var_dump($func(1)) // => bool(true)
    var_dump($func()) // => bool(true)