PHP 8.6.0 Beta 1 is available for testing

Класс ReflectionFunction

(PHP 5, PHP 7, PHP 8)

Введение

Класс ReflectionFunction сообщает информацию о функциях.

Обзор класса

class ReflectionFunction extends ReflectionFunctionAbstract {
/* Константы */
public const int IS_DEPRECATED ;
/* Наследуемые свойства */
public string $name ;
/* Методы */
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
/* Наследуемые методы */
public function ReflectionFunctionAbstract::getAttributes (? string $name = null , int $flags = 0): array
abstract public function ReflectionFunctionAbstract::__toString (): void
}

Предопределённые константы

Модификаторы ReflectionFunction

ReflectionFunction::IS_DEPRECATED int

Указывает на то, что функция устарела (deprecated).

Список изменений

Версия Описание
8.4.0 Константы класса теперь типизированы.
8.0.0 Метод ReflectionFunction::export() был удалён.

Содержание

Нашли ошибку?

ИнструкцияИсправлениеСообщение об ошибке
+Добавить

Примечания пользователей 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.
15 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 ]
+Добавить

AltStyle によって変換されたページ (->オリジナル) /