PHP 8.4.2 Released!

A classe ReflectionMethod

(PHP 5, PHP 7, PHP 8)

Introdução

A classe ReflectionMethod relata informações sobre um método.

Resumo da classe

class ReflectionMethod extends ReflectionFunctionAbstract {
/* Constantes */
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;
/* Propriedades */
public string $class;
/* Propriedades herdadas */
public string $name;
/* Métodos */
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
/* Métodos herdados */
}

Propriedades

name

Nome do método

class

Nome da classe

Constantes predefinidas

Modificadores de ReflectionMethod

ReflectionMethod::IS_STATIC int

Indica que o método é estático. Antes do PHP 7.4.0, o valor era 1.

ReflectionMethod::IS_PUBLIC int

Indica que o método é público. Antes do PHP 7.4.0, o valor era 256.

ReflectionMethod::IS_PROTECTED int

Indica que o método é protegido. Antes do PHP 7.4.0, o valor era 512.

ReflectionMethod::IS_PRIVATE int

Indica que o método é privado. Antes do PHP 7.4.0, o valor era 1024.

ReflectionMethod::IS_ABSTRACT int

Indica que o método é abstrato. Antes do PHP 7.4.0, o valor era 2.

ReflectionMethod::IS_FINAL int

Indica que o método é final. Antes do PHP 7.4.0, o valor era 4.

Nota:

Os valores dessas constantes podem mudar entre as versões do PHP. É recomendado sempre utilizar as constantes e não depender diretamente dos valores.

Registro de Alterações

Versão Descrição
8.4.0 As constantes de classe agora são tipadas.
8.0.0 ReflectionMethod::export() foi removido.

Índice

adicione uma nota

Notas Enviadas por Usuários (em inglês) 2 notes

up
12
webseiten dot designer at googlemail dot com
13 years ago
Note that the public member $class contains the name of the class in which the method has been defined:

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

$method = new ReflectionMethod('B', '__construct');
echo
$method->class; // prints 'A'
?>
up
9
Anonymous
4 years ago
We can make a "Automatic dependenci injector" in classes when her constructors depends other classes (with type hint).

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

}

// Automatic dependence injection (CLASSES)

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

?>

Results in:

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