note 125551 added to reflectionfunctionabstract.getparameters

From: 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

« previous php.notes (#215911) next »