update page now
PHP 8.4.22 Released!

La clase ReflectionFunction

(PHP 5, PHP 7, PHP 8)

Introducción

La clase ReflectionFunction proporciona información sobre una función.

Sinopsis de la Clase

class ReflectionFunction extends ReflectionFunctionAbstract {
/* Constantes */
public const int IS_DEPRECATED;
/* Propiedades heredadas */
public string $name;
/* Métodos */
public function __construct(Closure|string $function)
public static function export(string $name, string $return = ?): string
public function getClosure(): Closure
public function invoke(mixed ...$args): mixed
public function invokeArgs(array $args): mixed
public function isAnonymous(): bool
#[\Deprecated]
public function isDisabled(): bool
public function __toString(): string
/* Métodos heredados */
public function ReflectionFunctionAbstract::getAttributes(?string $name = null, int $flags = 0): array
abstract public function ReflectionFunctionAbstract::__toString(): void
}

Constantes predefinidas

Modificadores de ReflectionFunction

ReflectionFunction::IS_DEPRECATED int

Indica una función obsoleta.

Historial de cambios

Versión Descripción
8.4.0 Las constantes de clase ahora están tipadas.
8.0.0 ReflectionFunction::export() ha sido eliminada.

Tabla de contenidos

add a note

User Contributed Notes 2 notes

up
9
a dot lucassilvadeoliveira at gmail dot com
5 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.
up
-3
Lorenz R.S.
14 years ago
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 ]
To Top