PHP Conference Japan 2024

ReflectionMethod 类

(PHP 5、PHP 7、PHP 8)

简介

The ReflectionMethod 类报告有关方法的信息。

类摘要

class ReflectionMethod extends ReflectionFunctionAbstract {
/* 常量 */
public const int IS_STATIC;
public const int IS_PUBLIC;
public const int IS_PROTECTED;
public const int IS_PRIVATE;
public const int IS_ABSTRACT;
public const int IS_FINAL;
/* 属性 */
public string $class;
/* 继承的属性 */
public string $name;
/* 方法 */
public __construct(object|string $objectOrMethod, string $method)
public __construct(string $classMethod)
public static createFromMethodName(string $method): static
public static export(string $class, string $name, bool $return = false): string
public getClosure(?object $object = null): Closure
public getModifiers(): int
public hasPrototype(): bool
public invoke(?object $object, mixed ...$args): mixed
public invokeArgs(?object $object, array $args): mixed
public isAbstract(): bool
public isDestructor(): bool
public isFinal(): bool
public isPrivate(): bool
public isProtected(): bool
public isPublic(): bool
public setAccessible(bool $accessible): void
public __toString(): string
/* 继承的方法 */
}

属性

name

方法名称

class

类名称

预定义常量

ReflectionMethod 修饰符

ReflectionMethod::IS_STATIC 整数

指示该方法是静态的。在 PHP 7.4.0 之前,其值为 1

ReflectionMethod::IS_PUBLIC 整数

指示该方法是公有的。在 PHP 7.4.0 之前,其值为 256

ReflectionMethod::IS_PROTECTED 整数

指示该方法是受保护的。在 PHP 7.4.0 之前,其值为 512

ReflectionMethod::IS_PRIVATE 整数

指示该方法是私有的。在 PHP 7.4.0 之前,其值为 1024

ReflectionMethod::IS_ABSTRACT 整数

指示该方法是抽象的。在 PHP 7.4.0 之前,其值为 2

ReflectionMethod::IS_FINAL 整数

指示该方法是最终的。在 PHP 7.4.0 之前,其值为 4

注意:

这些常量的值可能会在不同的 PHP 版本之间发生变化。建议始终使用常量,而不是直接依赖其值。

变更日志

版本 描述
8.4.0 类常量现在具有类型。
8.0.0 ReflectionMethod::export() 已移除。

目录

添加注释

用户贡献的注释 2 条注释

webseiten dot designer at googlemail dot com
13 年前
请注意,公共成员 $class 包含定义方法的类的名称

<?php
class A {public function __construct() {}}
class
B extends A {}

$method = new ReflectionMethod('B', '__construct');
echo
$method->class; // 输出 'A'
?>
匿名用户
4 年前
当类的构造函数依赖于其他类(使用类型提示)时,我们可以在类中创建“自动依赖注入器”。

<?php

class Dependence1 {
function
foo() {
echo
"foo";
}
}

class
Dependence2 {
function
foo2() {
echo
"foo2";
}
}

final class
myClass
{
private
$dep1;
private
$dep2;

public function
__construct(
Dependence1 $dependence1,
Dependence2 $dependence2
)
{
$this->dep1 = $dependence1;
$this->dep2 = $dependence2;
}

}

// 自动依赖注入 (类)

$constructor = new ReflectionMethod(myClass::class, '__construct');
$parameters = $constructor->getParameters();

$dependences = [];
foreach (
$parameters as $parameter) {
$dependenceClass = (string) $parameter->getType();
$dependences[] = new $dependenceClass();
}

$instance = new myClass(...$dependences);
var_dump($instance);

?>

结果为

object(myClass)#6 (2) {
["dep1":"myClass":private]=>
object(Dependence1)#4 (0) {
}
["dep2":"myClass":private]=>
object(Dependence2)#5 (0) {
}
}
To Top