PHP 8.3.27 Released!

ReflectionFunctionAbstract::getParameters

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

ReflectionFunctionAbstract::getParameters获取参数

说明

public ReflectionFunctionAbstract::getParameters(): array

获取通过 ReflectionParameter 数组返回参数列表。顺序为源码中定义的顺序。

参数

此函数没有参数。

返回值

ReflectionParameter 对象组成的参数列表。

参见

添加备注

用户贡献的备注 2 notes

up
9
dabidi at slupca dot pl
10 years ago
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)<?phppublic 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=123will be ignored some_unwanted_varOf course behind this i have .htaccess, autoloader and controller
up
4
a dot lucassilvadeoliveira at gmail dot com
4 years ago
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.
To Top