CakeFest 2024: The Official CakePHP Conference

The ReflectionClass class

(PHP 5, PHP 7, PHP 8)

Introduction

La classe ReflectionClass rapporte des informations sur une classe.

Synopsis de la classe

class ReflectionClass implements Reflector {
/* Constantes */
public const int IS_IMPLICIT_ABSTRACT;
public const int IS_FINAL;
public const int IS_READONLY;
/* Propriétés */
public string $name;
/* Méthodes */
public __construct(object|string $objectOrClass)
public static export(mixed $argument, bool $return = false): string
public getAttributes(?string $name = null, int $flags = 0): array
public getConstant(string $name): mixed
public getConstants(?int $filter = null): array
public getEndLine(): int|false
public getMethods(?int $filter = null): array
public getModifiers(): int
public getName(): string
public getProperties(?int $filter = null): array
public getStaticPropertyValue(string $name, mixed &$def_value = ?): mixed
public getTraits(): array
public hasConstant(string $name): bool
public hasMethod(string $name): bool
public hasProperty(string $name): bool
public inNamespace(): bool
public isAbstract(): bool
public isAnonymous(): bool
public isCloneable(): bool
public isEnum(): bool
public isFinal(): bool
public isInstance(object $object): bool
public isInterface(): bool
public isInternal(): bool
public isIterable(): bool
public isReadOnly(): bool
public isTrait(): bool
public newInstance(mixed ...$args): object
public newInstanceArgs(array $args = []): ?object
public setStaticPropertyValue(string $name, mixed $value): void
public __toString(): string
}

Propriétés

name

Nom de la classe. En lecture seule, lance une ReflectionException lors d'une tentative d'écriture.

Constantes pré-définies

Modificateurs de ReflectionClass

ReflectionClass::IS_IMPLICIT_ABSTRACT

Indique si la classe est abstraite car elle contient des méthodes abstraites.

ReflectionClass::IS_EXPLICIT_ABSTRACT

Indique si la classe est abstraite en raison de sa définition.

ReflectionClass::IS_FINAL

Indique si la classe est finale.

ReflectionClass::IS_READONLY

Indique si la classe est readonly.

Historique

Version Description
8.0.0 ReflectionClass::export() a été supprimée.

Sommaire

add a note

User Contributed Notes 5 notes

up
39
danbettles at yahoo dot co dot uk
15 years ago
To reflect on a namespaced class in PHP 5.3, you must always specify the fully qualified name of the class - even if you've aliased the containing namespace using a "use" statement.

So instead of:

<?php
use App\Core as Core;
$oReflectionClass = new ReflectionClass('Core\Singleton');
?>

You would type:

<?php
use App\Core as Core;
$oReflectionClass = new ReflectionClass('App\Core\Singleton');
?>
up
21
Anonymous
10 years ago
Reflecting an alias will give you a reflection of the resolved class.

<?php

class X {

}

class_alias('X','Y');
class_alias('Y','Z');
$z = new ReflectionClass('Z');
echo
$z->getName(); // X

?>
up
24
Anonymous
12 years ago
Unserialized reflection class cause error.

<?php
/**
* abc
*/
class a{}

$ref = new ReflectionClass('a');
$ref = unserialize(serialize($ref));
var_dump($ref);
var_dump($ref->getDocComment());

// object(ReflectionClass)#2 (1) {
// ["name"]=>
// string(1) "a"
// }
// PHP Fatal error: ReflectionClass::getDocComment(): Internal error: Failed to retrieve the reflection object
?>
up
3
featherbits
3 years ago
In order to get class attributes look here (php8)
https://www.php.net/manual/en/language.attributes.reflection.php
up
-35
YoungOfCthulhu
8 years ago
It is also possible to do reflection from within the class and get the methods for instance.

<?php

class test
{
private
$test = "";

public function
setTest($test)
{
$this->test = $test;
return
$this;
}

public function
getTest()
{
return
$this->test;
}

public function
run(){
$class = new ReflectionClass('test');
$methods = $class->getMethods();
var_dump($methods);
}
}

Called from another php file you get the proper result:
array(
3) {
[
0]=>
&
object(ReflectionMethod)#3 (2) {
["name"]=>
string(8) "setTest"
["class"]=>
string(4) "test"
}
[
1]=>
&
object(ReflectionMethod)#4 (2) {
["name"]=>
string(8) "getTest"
["class"]=>
string(4) "test"
}
[
2]=>
&
object(ReflectionMethod)#5 (2) {
["name"]=>
string(3) "run"
["class"]=>
string(4) "test"
}
}
To Top