PHP 7.4.22 Released!

La classe ReflectionMethod

(PHP 5, PHP 7, PHP 8)

Introduction

La classe ReflectionMethod rapporte des informations sur une méthode.

Synopsis de la classe

class ReflectionMethod extends ReflectionFunctionAbstract implements Reflector {
/* Constantes */
const int IS_STATIC = 16;
const int IS_PUBLIC = 1;
const int IS_PROTECTED = 2;
const int IS_PRIVATE = 4;
const int IS_ABSTRACT = 64;
const int IS_FINAL = 32;
/* Propriétés */
public $name;
public $class;
/* Méthodes */
public __construct(object|string $objectOrMethod, string $method)
public __construct(string $classMethod)
public static export(string $class, string $name, bool $return = false): string
public getClosure(?object $object = null): Closure
public getModifiers(): int
public invoke(?object $object, mixed ...$args): mixed
public invokeArgs(?object $object, array $args): mixed
public isAbstract(): bool
public isConstructor(): bool
public isDestructor(): bool
public isFinal(): bool
public isPrivate(): bool
public isProtected(): bool
public isPublic(): bool
public isStatic(): bool
public setAccessible(bool $accessible): void
public __toString(): string
/* Méthodes héritées */
public ReflectionFunctionAbstract::getAttributes(string $name = null, int $flags = 0): array
}

Propriétés

name

Nom de la méthode

class

Nom de la classe

Constantes pré-définies

Modificateurs de ReflectionMethod

ReflectionMethod::IS_STATIC

Indique que la méthode est statique Antérieur à PHP 7.4.0, la valeur était 1.

ReflectionMethod::IS_PUBLIC

Indique que la méthode est publique Antérieur à PHP 7.4.0, la valeur était 256.

ReflectionMethod::IS_PROTECTED

Indique que la méthode est protégée Antérieur à PHP 7.4.0, la valeur était 512.

ReflectionMethod::IS_PRIVATE

Indique que la méthode est privée Antérieur à PHP 7.4.0, la valeur était 1024.

ReflectionMethod::IS_ABSTRACT

Indique que la méthode est abstraite Antérieur à PHP 7.4.0, la valeur était 2.

ReflectionMethod::IS_FINAL

Indique que la méthode est finale Antérieur à PHP 7.4.0, la valeur était 4.

Note:

La valeur de ces constantes peut changer entre les versions de PHP. Il est recommandé de toujours utiliser les constantes et de ne pas dépendre sur les valeurs directement.

Sommaire

add a note add a note

User Contributed Notes 3 notes

up
6
Anonymous
9 months 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
11
webseiten dot designer at googlemail dot com
10 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
-16
no dot prob at gmx dot net
15 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