sevavietl / overloaded-function
PHP函数重载包装器。
dev-master
2019-03-09 20:27 UTC
Requires
- php: >=7.2
- thorough-php/type-guard: ^1.0
Requires (Dev)
- php-coveralls/php-coveralls: ^2.1
- phpstan/phpstan: ^0.10.3
- phpunit/phpunit: ^6.3
This package is not auto-updated.
Last update: 2024-09-26 01:38:26 UTC
README
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)