PHP 8.3.4 Released!

La clase ReflectionMethod

(PHP 5, PHP 7, PHP 8)

Introducción

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

Sinopsis de la Clase

class ReflectionMethod extends ReflectionFunctionAbstract implements Reflector {
/* Constantes */
const integer IS_STATIC = 1;
const integer IS_PUBLIC = 256;
const integer IS_PROTECTED = 512;
const integer IS_PRIVATE = 1024;
const integer IS_ABSTRACT = 2;
const integer IS_FINAL = 4;
/* Propiedades */
public $name;
public $class;
/* Métodos */
public __construct(mixed $class, string $name)
public static createFromMethodName(string $method): static
public static export(string $class, string $name, bool $return = false): string
public getClosure(object $object): Closure
public getModifiers(): int
public hasPrototype(): bool
public invoke(object $object, mixed $... = ?): 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 heredados */
}

Propiedades

name

Nombre del método

class

Nombre de la clase

Constantes predefinidas

Modificadores ReflectionMethod

ReflectionMethod::IS_STATIC

Indica que el método es estático.

ReflectionMethod::IS_PUBLIC

Indica que el método es público.

ReflectionMethod::IS_PROTECTED

Indica que el método está protegido.

ReflectionMethod::IS_PRIVATE

Indica que el método es privado.

ReflectionMethod::IS_ABSTRACT

Indicates that the method is abstract.

ReflectionMethod::IS_FINAL

Indica que este método es final.

Tabla de contenidos

add a note

User Contributed Notes 3 notes

up
9
Anonymous
3 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) {
}
}
up
12
webseiten dot designer at googlemail dot com
12 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
-18
no dot prob at gmx dot net
17 years ago
I have written a function which returns the value of a given DocComment tag.

Full example:

<?php

header
('Content-Type: text/plain');

class
Example
{
/**
* This is my DocComment!
*
* @DocTag: prints Hello World!
*/
public function myMethod()
{
echo
'Hello World!';
}
}

function
getDocComment($str, $tag = '')
{
if (empty(
$tag))
{
return
$str;
}

$matches = array();
preg_match("/".$tag.":(.*)(\\r\\n|\\r|\\n)/U", $str, $matches);

if (isset(
$matches[1]))
{
return
trim($matches[1]);
}

return
'';
}

$method = new ReflectionMethod('Example', 'myMethod');

// will return Hello World!
echo getDocComment($method->getDocComment(), '@DocTag');

?>

Maybe you can add this functionality to the getDocComment methods of the reflection classes.
To Top