ReflectionFunctionAbstract::getParameters

(PHP 5)

ReflectionFunctionAbstract::getParametersПолучает аргументы

Описание

public array ReflectionFunctionAbstract::getParameters ( void )

Получение аргументов в виде массива объектов ReflectionParameter.

Внимание

К настоящему времени эта функция еще не была документирована; для ознакомления доступен только список аргументов.

Список параметров

У этой функции нет параметров.

Возвращаемые значения

Аргументы, представленные объектами ReflectionParameter.

Смотрите также

Коментарии

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

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