Completed
Push — master ( a5dc68...ee00d8 )
by Arnold
02:37
created

func_functions.php ➔ call_user_func_named_array()   C

Complexity

Conditions 7
Paths 12

Size

Total Lines 26
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 16
CRAP Score 7

Importance

Changes 0
Metric Value
cc 7
eloc 18
nc 12
nop 2
dl 0
loc 26
ccs 16
cts 16
cp 1
crap 7
rs 6.7272
c 0
b 0
f 0
1
<?php
2
3
namespace Jasny;
4
5
/**
6
 * Check if the file contains the specified string
7
 *
8
 * @param callable $callback
9
 * @param array    $params_arr
10
 * @return mixed
11
 */
12
function call_user_func_named_array($callback, array $params_arr)
13
{
14 8
    $refl = is_array($callback)
15 2
        ? new \ReflectionMethod($callback[0], $callback[1])
16 8
        : new \ReflectionFunction($callback);
17
    
18 8
    $args = [];
19 8
    $max = 0;
20 8
    $params = $refl->getParameters();
21
22 8
    foreach ($params as $i => $param) {
23 8
        $key = $param->name;
24
        
25 8
        if (array_key_exists($key, $params_arr)) {
26 6
            $args[] = $params_arr[$key];
27 6
            $max = $i + 1;
28 6
        } elseif ($param->isOptional()) {
29 4
            $args[] = $param->isDefaultValueAvailable() ? $param->getDefaultValue() : null;
30
        } else {
31 2
            $fn = $refl instanceof \ReflectionMethod ? $refl->class . '::' . $refl->name : $refl->name;
32 8
            throw new \RuntimeException("Missing argument '$key' for {$fn}()");
33
        }
34
    }
35
    
36 6
    return call_user_func_array($callback, array_slice($args, 0, $max));
37
}
38