<?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;
}
PD9waHAKCmZ1bmN0aW9uIGFycmF5X21hZ2ljKGNhbGxhYmxlICRmdW5jdGlvbiwgYXJyYXkgJiRhcnJheSwgYXJyYXkgJGFkZGl0aW9uYWwgPSBhcnJheSgpKQp7CiAgICAkZnVuY3Rpb24oJGFycmF5ICsgJGFkZGl0aW9uYWwpOwp9Cgp0ZXN0KCdhcnJheV9rZXlfZXhpc3RzJyk7CnRlc3QoJ2FycmF5X3dhbGsnKTsKdGVzdCgnYXJyYXlfbWFnaWMnKTsKCmZ1bmN0aW9uIHRlc3QoJGZ1bmNOYW1lKQp7CiAgICAkZnVuY1JlZmwgPSBuZXcgUmVmbGVjdGlvbkZ1bmN0aW9uKCRmdW5jTmFtZSk7CiAgICBlY2hvICRmdW5jTmFtZSAuIFBIUF9FT0w7CiAgICBmb3JlYWNoICgkZnVuY1JlZmwtPmdldFBhcmFtZXRlcnMoKSBhcyAkcGFyYW1SZWZsKSB7CiAgICAgICAgZWNobyAnICAnIC4gJHBhcmFtUmVmbC0+Z2V0TmFtZSgpIC4gUEhQX0VPTDsKICAgICAgICBlY2hvICcgICAgaXNQYXNzZWRCeVJlZmVyZW5jZTogJyAuIHZhcl9leHBvcnQoJHBhcmFtUmVmbC0+aXNQYXNzZWRCeVJlZmVyZW5jZSgpLCB0cnVlKSAuIFBIUF9FT0w7CiAgICAgICAgZWNobyAnICAgIGlzT3B0aW9uYWw6ICAgICAgICAgICcgLiB2YXJfZXhwb3J0KCRwYXJhbVJlZmwtPmlzT3B0aW9uYWwoKSwgdHJ1ZSkgLiBQSFBfRU9MOwogICAgICAgIGVjaG8gJyAgICBpc0FycmF5OiAgICAgICAgICAgICAnIC4gdmFyX2V4cG9ydCgkcGFyYW1SZWZsLT5pc0FycmF5KCksIHRydWUpIC4gUEhQX0VPTDsKICAgICAgICBlY2hvICcgICAgaXNDYWxsYWJsZTogICAgICAgICAgJyAuIHZhcl9leHBvcnQoJHBhcmFtUmVmbC0+aXNDYWxsYWJsZSgpLCB0cnVlKSAuIFBIUF9FT0w7CiAgICB9CiAgICBlY2hvIFBIUF9FT0w7Cn0=