PHP 8.5.0 RC4 available for testing

La clase ReflectionMethod

(PHP 5, PHP 7, PHP 8)

Introducción

La clase ReflectionMethod proporciona información sobre un método.

Sinopsis de la Clase

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;
/* Propiedades */
public string $class;
/* Propiedades heredadas */
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
#[\Deprecated]
public setAccessible(bool $accessible): void
public __toString(): string
/* Métodos heredados */
}

Propiedades

name

Nombre del método

class

Nombre de la clase

Constantes predefinidas

Modificadores de ReflectionMethod

ReflectionMethod::IS_STATIC int

Indica que el método es estático Anterior a PHP 7.4.0, el valor era 1.

ReflectionMethod::IS_PUBLIC int

Indica que el método es público Anterior a PHP 7.4.0, el valor era 256.

ReflectionMethod::IS_PROTECTED int

Indica que el método es protegido Anterior a PHP 7.4.0, el valor era 512.

ReflectionMethod::IS_PRIVATE int

Indica que el método es privado Anterior a PHP 7.4.0, el valor era 1024.

ReflectionMethod::IS_ABSTRACT int

Indica que el método es abstracto Anterior a PHP 7.4.0, el valor era 2.

ReflectionMethod::IS_FINAL int

Indica que el método es final Anterior a PHP 7.4.0, el valor era 4.

Nota:

El valor de estas constantes puede cambiar entre versiones de PHP. Se recomienda siempre utilizar las constantes y no depender de los valores directamente.

Historial de cambios

Versión Descripción
8.4.0 Las constantes de clase ahora están tipadas.
8.0.0 ReflectionMethod::export() ha sido eliminada.

Tabla de contenidos

add a note

User Contributed Notes 2 notes

up
13
webseiten dot designer at googlemail dot com
14 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
5 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