<?php

function array_magic(callable $function, array &$array, array $additional = array())
{
    $function($array + $additional);
}

test('array_key_exists');
test('array_walk');
test('array_magic');

function test($funcName)
{
    $funcRefl = new ReflectionFunction($funcName);
    echo $funcName . PHP_EOL;
    foreach ($funcRefl->getParameters() as $paramRefl) {
        echo '  ' . $paramRefl->getName() . PHP_EOL;
        echo '    isPassedByReference: ' . var_export($paramRefl->isPassedByReference(), true) . PHP_EOL;
        echo '    isOptional:          ' . var_export($paramRefl->isOptional(), true) . PHP_EOL;
        echo '    isArray:             ' . var_export($paramRefl->isArray(), true) . PHP_EOL;
        echo '    isCallable:          ' . var_export($paramRefl->isCallable(), true) . PHP_EOL;
    }
    echo PHP_EOL;
}