(PHP 5, PHP 7, PHP 8)
TheReflectionFunction class reports information about a function.
ReflectionFunction::IS_DEPRECATED
intIndicates deprecated functions.
Version | Description |
---|---|
8.4.0 | The class constants are now typed. |
8.0.0 | ReflectionFunction::export() was removed. |
We can use this functionality to automatically pass arguments to our function based on some data structure.
NOTE: I am using a php 8.0> feature called "Nameds parameter"
<?php
$valuesToProcess= [
'name'=>'Anderson Lucas Silva de Oliveira',
'age'=>21,
'hobbie'=>'Play games'
];
functionprocessUserData($name,$age,$job="",$hobbie="")
{
$msg="Hello$name. You have$age years old";
if (!empty($job)) {
$msg.=". Your job is$job";
}
if (!empty($hobbie)) {
$msg.=". Your hobbie is$hobbie";
}
echo$msg.".";
}
$refFunction= newReflectionFunction('processUserData');
$parameters=$refFunction->getParameters();
$validParameters= [];
foreach ($parametersas$parameter) {
if (!array_key_exists($parameter->getName(),$valuesToProcess) && !$parameter->isOptional()) {
throw newDomainException('Cannot resolve the parameter'.$parameter->getName());
}
if(!array_key_exists($parameter->getName(),$valuesToProcess)) {
continue;
}
$validParameters[$parameter->getName()] =$valuesToProcess[$parameter->getName()];
}
$refFunction->invoke(...$validParameters);
?>
Results in:
Hello Anderson Lucas Silva de Oliveira. You have 21 years old. Your hobbie is Play games.
Here is a concise example of ReflectionFunction usage for Parameter Reflection / introspection (e.g. to automatically generate API descriptions)
<?php
$properties=$reflector->getProperties();
$refFunc= newReflectionFunction('preg_replace');
foreach($refFunc->getParameters() as$param){
//invokes ■ReflectionParameter::__toString
print$param;
}
?>
prints:
Parameter #0 [ <required> $regex ]
Parameter #1 [ <required> $replace ]
Parameter #2 [ <required> $subject ]
Parameter #3 [ <optional> $limit ]
Parameter #4 [ <optional> &$count ]