ReflectionFunctionAbstract::getParameters

(PHP 5)

ReflectionFunctionAbstract::getParametersGets parameters

Description

public array ReflectionFunctionAbstract::getParameters ( void )

Get the parameters as an array of ReflectionParameter.

Warning

This function is currently not documented; only its argument list is available.

Parameters

This function has no parameters.

Return Values

The parameters, as a ReflectionParameter object.

See Also

Коментарии

This is part of my private framework that uses reflection. 
This function get arguments list from theme method and puts corresponding vars from $_REQUEST ($_GET, $_POST, and $_COOKIE)

<?php
public static function fire_theme_method($class$method)
{
       
$fire_args=array();
       
       
$reflection = new ReflectionMethod($class$method);

    foreach(
$reflection->getParameters() AS $arg)
    {
        if(
$_REQUEST[$arg->name])
       
$fire_args[$arg->name]=$_REQUEST[$arg->name];
        else
       
$fire_args[$arg->name]=null;
    }
       
    return 
call_user_func_array(array($class$method), $fire_args);
}
?>
For example, if my theme method needs only id, and we get this url:
http://example.com/my_class/my_method/?id=12&some_unwanted_var=123
will be ignored some_unwanted_var

Of course behind this i have .htaccess, autoloader and controller
2015-10-27 15:33:30
http://php5.kiev.ua/manual/ru/reflectionfunctionabstract.getparameters.html
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.
2020-11-28 20:08:54
http://php5.kiev.ua/manual/ru/reflectionfunctionabstract.getparameters.html

    Поддержать сайт на родительском проекте КГБ