请注意,公共成员 $class 包含定义方法的类的名称
<?php
class A {public function __construct() {}}
class B extends A {}
$method = new ReflectionMethod('B', '__construct');
echo $method->class; // 输出 'A'
?>
(PHP 5、PHP 7、PHP 8)
The 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() 已移除。 |
请注意,公共成员 $class 包含定义方法的类的名称
<?php
class A {public function __construct() {}}
class B extends A {}
$method = new ReflectionMethod('B', '__construct');
echo $method->class; // 输出 'A'
?>
当类的构造函数依赖于其他类(使用类型提示)时,我们可以在类中创建“自动依赖注入器”。
<?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) {
}
}