note 125551 added to reflectionfunctionabstract.getparameters
| From: | a dot lucassilvadeoliveira at gmail dot com | Date: | Sat, 28 Nov 2020 18:08:54 +0000 |
| Subject: | note 125551 added to reflectionfunctionabstract.getparameters | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-215911@lists.php.net to get a copy of this message | ||
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'
];
function processUserData($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 = new ReflectionFunction('processUserData');
$parameters = $refFunction->getParameters();
$validParameters = [];
foreach ($parameters as $parameter) {
if (!array_key_exists($parameter->getName(), $valuesToProcess) &&
!$parameter->isOptional()) {
throw new DomainException('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.
----
Server IP: 45.112.84.4
Probable Submitter: 45.91.156.130 (proxied: 179.96.134.88)
----
Manual Page -- http://php.net/manual/en/reflectionfunctionabstract.getparameters.php
Edit -- https://master.php.net/note/edit/125551
Del: integrated -- https://master.php.net/note/delete/125551/integrated
Del: useless -- https://master.php.net/note/delete/125551/useless
Del: bad code -- https://master.php.net/note/delete/125551/bad+code
Del: spam -- https://master.php.net/note/delete/125551/spam
Del: non-english -- https://master.php.net/note/delete/125551/non-english
Del: in docs -- https://master.php.net/note/delete/125551/in+docs
Del: other reasons-- https://master.php.net/note/delete/125551
Reject -- https://master.php.net/note/reject/125551
Search -- https://master.php.net/manage/user-notes.php