The ReflectionFunction class

(PHP 5)

Introduction

The ReflectionFunction class reports information about a function.

Class synopsis

ReflectionFunction extends ReflectionFunctionAbstract implements Reflector {
/* Constants */
const integer IS_DEPRECATED = 262144 ;
/* Properties */
public $name ;
/* Methods */
public __construct ( mixed $name )
public static string export ( string $name [, string $return ] )
public Closure getClosure ( void )
public mixed invoke ([ mixed $parameter [, mixed $... ]] )
public mixed invokeArgs ( array $args )
public bool isDisabled ( void )
public string __toString ( void )
/* Inherited methods */
final private void ReflectionFunctionAbstract::__clone ( void )
public ReflectionClass ReflectionFunctionAbstract::getClosureScopeClass ( void )
public ReflectionExtension ReflectionFunctionAbstract::getExtension ( void )
public string ReflectionFunctionAbstract::getName ( void )
abstract public void ReflectionFunctionAbstract::__toString ( void )
}

Properties

name

Name of the function. Read-only, throws ReflectionException in attempt to write.

Predefined Constants

ReflectionFunction Modifiers

ReflectionFunction::IS_DEPRECATED

Indicates deprecated functions.

Table of Contents

Коментарии

Автор:
Here is a concise example of ReflectionFunction usage for Parameter Reflection / introspection (e.g. to automatically generate API descriptions)

<?php
$properties 
$reflector->getProperties();
$refFunc = new ReflectionFunction('preg_replace');
foreach( 
$refFunc->getParameters() as $param ){
   
//invokes ■ReflectionParameter::__toString
   
print $param;
}
?>

prints:

Parameter #0 [ <required> $regex ]
Parameter #1 [ <required> $replace ]
Parameter #2 [ <required> $subject ]
Parameter #3 [ <optional> $limit ]
Parameter #4 [ <optional> &$count ]
2011-08-12 04:24:03
http://php5.kiev.ua/manual/ru/class.reflectionfunction.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:15:13
http://php5.kiev.ua/manual/ru/class.reflectionfunction.html

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