ReflectionParameter 类

(PHP 5、PHP 7、PHP 8)

简介

ReflectionParameter 类检索有关函数或方法参数的信息。

要内省函数参数,首先创建一个 ReflectionFunctionReflectionMethod 类的实例,然后使用它们的 ReflectionFunctionAbstract::getParameters() 方法来检索参数数组。

类概要

class ReflectionParameter implements Reflector {
/* 属性 */
public string $name;
/* 方法 */
public __construct(string|array|object $function, int|string $param)
public allowsNull(): bool
private __clone(): void
public static export(string $function, string $parameter, bool $return = ?): string
public getAttributes(?string $name = null, int $flags = 0): array
public getName(): string
public getPosition(): int
public hasType(): bool
public isArray(): bool
public isCallable(): bool
public isOptional(): bool
public isVariadic(): bool
public __toString(): string
}

属性

name

参数的名称。只读,试图写入会抛出 ReflectionException

变更日志

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

目录

添加笔记

用户贡献笔记 4 笔记

fgm at riff dot org
16 年前
关于 ReflectionParameter 构造函数签名的说明实际上是不完整的,至少在 5.2.5 中是这样:可以使用整数作为第二个参数,构造函数将使用它来返回第 n 个参数。

这允许您在记录来自扩展的代码时获得正确的 ReflectionParameter 对象,而这些扩展(奇怪的是)定义了多个具有相同名称的参数。基于字符串的构造函数始终返回具有匹配名称的第一个参数,而基于整数的构造函数正确返回第 n 个参数。

简而言之,这是有效的
<?php
// 假设扩展定义了类似内容:
// Some_Class::someMethod($a, $x, $y, $x, $y)
$p = new ReflectionParameter(array('Some_Class', 'someMethod'), 4);
// 返回最后一个参数,而
$p = new ReflectionParameter(array('Some_Class', 'someMethod'), 'y');
// 始终返回位置 2 的第一个 $y
?>
killgecNOFSPAM at gmail dot com
17 年前
ReflectionParameter 构造函数的签名正确地为

public function __construct(array/string $function, string $name);

其中 $function 是全局函数的名称,或者是一个类/方法名对。
massimo at mmware dot it
17 年前
我使用 ReflectionFunction 中的 ReflectionParameter 类发现了这些使用内部函数(例如 print_r、str_replace 等)的限制。

1. 参数名与手册不匹配:(尝试使用 arg "call_user_func" 的示例 19.35)
2. 一些函数(例如 PCRE 函数,preg_match 等)具有空参数名
3. 对参数调用 getDefaultValue 会导致异常 "无法确定内部函数的默认值"
rasmus at mindplay dot dk
10 个月前
现在有这么多参数模式,我需要确切地知道 `ReflectionParameter` 将返回什么,所以我写了一个小的测试脚本 - 您可以在此处找到该脚本和结果表

https://gist.github.com/mindplay-dk/082458088988e32256a827f9b7491e17
To Top