ReflectionFunction 类

(PHP 5, PHP 7, PHP 8)

简介

ReflectionFunction 类报告有关函数的信息。

类概述

class ReflectionFunction extends ReflectionFunctionAbstract {
/* 常量 */
public const int IS_DEPRECATED;
/* 继承的属性 */
public string $name;
/* 方法 */
public __construct(Closure|string $function)
public static export(string $name, string $return = ?): string
public invoke(mixed ...$args): mixed
public invokeArgs(array $args): mixed
public isAnonymous(): bool
public isDisabled(): bool
public __toString(): string
/* 继承的方法 */
}

预定义常量

ReflectionFunction 修饰符

ReflectionFunction::IS_DEPRECATED

表示已弃用的函数。

变更日志

版本 描述
8.0.0 ReflectionFunction::export() 已移除。

目录

添加备注

用户贡献笔记 2 笔记

7
a dot lucassilvadeoliveira at gmail dot com
3 年前
我们可以使用此功能根据某些数据结构自动将参数传递给我们的函数。

注意:我使用的是 php 8.0> 的一个名为“命名参数”的功能

<?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);
?>

结果为

Hello Anderson Lucas Silva de Oliveira. You have 21 years old. Your hobbie is Play games.
-2
Lorenz R.S.
13 年前
以下是一个简洁的 ReflectionFunction 使用示例,用于参数反射/自省(例如,自动生成 API 描述)

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

打印

Parameter #0 [ <required> $regex ]
Parameter #1 [ <required> $replace ]
Parameter #2 [ <required> $subject ]
Parameter #3 [ <optional> $limit ]
Parameter #4 [ <optional> &$count ]
To Top