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
?>
La classe ReflectionClass
(PHP 5)
Introduction
La classe ReflectionClass rapporte des informations sur une classe.
Synopsis de la classe
ReflectionClass
implements
Reflector
{
/* Constantes */
/* Propriétés */
public
$name
;
/* Méthodes */
__construct
( mixed
}$argument
)Propriétés
- name
-
Nom de la classe. En lecture seule, émets une exception de type ReflectionException si l'on tente d'y écrire.
Constantes pré-définies
Modificateurs de ReflectionClass
Sommaire
- ReflectionClass::__construct — Construit une ReflectionClass
- ReflectionClass::export — Exporte une classe
- ReflectionClass::getConstant — Récupère une constante
- ReflectionClass::getConstants — Récupère les constantes
- ReflectionClass::getConstructor — Récupère le constructeur d'une classe
- ReflectionClass::getDefaultProperties — Récupère les propriétés par défaut
- ReflectionClass::getDocComment — Récupère les commentaires
- ReflectionClass::getEndLine — Récupère la fin d'une ligne
- ReflectionClass::getExtension — Récupère un objet ReflectionExtension pour l'extension définissant la classe
- ReflectionClass::getExtensionName — Récupère le nom de l'extension qui définit la classe
- ReflectionClass::getFileName — Récupère le nom du fichier déclarant la classe considérée
- ReflectionClass::getInterfaceNames — Récupère les noms des interfaces
- ReflectionClass::getInterfaces — Récupère les interfaces
- ReflectionClass::getMethod — Récupère un objet ReflectionMethod pour une méthode d'une classe
- ReflectionClass::getMethods — Récupère un tableau de méthodes
- ReflectionClass::getModifiers — Récupère les modificateurs
- ReflectionClass::getName — Récupère le nom de la classe
- ReflectionClass::getNamespaceName — Récupère l'espace de noms
- ReflectionClass::getParentClass — Récupère la classe parente
- ReflectionClass::getProperties — Récupère les propriétés
- ReflectionClass::getProperty — Récupère une ReflectionProperty pour une propriété d'une classe
- ReflectionClass::getShortName — Récupère le nom court d'une classe
- ReflectionClass::getStartLine — Récupère le numéro de ligne de départ
- ReflectionClass::getStaticProperties — Récupère les propriétés statiques
- ReflectionClass::getStaticPropertyValue — Récupère la valeur d'une propriété statique
- ReflectionClass::getTraitAliases — Retourne un tableau des alias du trait
- ReflectionClass::getTraitNames — Retourne un tableau de noms des traits utilisés par cette classe
- ReflectionClass::getTraits — Retourne un tableau des traits utilisés par cette classe
- ReflectionClass::hasConstant — Vérifie si une constante est définie
- ReflectionClass::hasMethod — Vérifie si une méthode est définie
- ReflectionClass::hasProperty — Vérifie si une propriété est définie
- ReflectionClass::implementsInterface — Vérifie si une classe implémente une interface
- ReflectionClass::inNamespace — Vérifie si une classe est définie dans un espace de noms
- ReflectionClass::isAbstract — Vérifie si une classe est abstraite
- ReflectionClass::isCloneable — Renseigne à propos de la propriété de duplication de la classe
- ReflectionClass::isFinal — Vérifie si une classe est finale
- ReflectionClass::isInstance — Vérifie si une classe est une instance d'une autre classe
- ReflectionClass::isInstantiable — Vérifie si une classe est instanciable
- ReflectionClass::isInterface — Vérifie si une classe est une interface
- ReflectionClass::isInternal — Vérifie si une classe est définie comme interne par une extension
- ReflectionClass::isIterateable — Vérifie si la classe est itérable
- ReflectionClass::isSubclassOf — Vérifie si la classe est une sous-classe
- ReflectionClass::isTrait — Renseigne s'il s'agit d'un trait
- ReflectionClass::isUserDefined — Vérifie si une classe a été définie dans l'espace utilisateur
- ReflectionClass::newInstance — Créer une nouvelle instance de la classe en utilisant les arguments fournis
- ReflectionClass::newInstanceArgs — Créer une nouvelle instance en utilisant les arguments fournis
- ReflectionClass::newInstanceWithoutConstructor — Crée une nouvelle instance de la classe sans invoquer le constructeur
- ReflectionClass::setStaticPropertyValue — Définit la valeur d'une propriété statiques
- ReflectionClass::__toString — Crée une représentation textuelle de l'objet
Anonymous ¶
1 year ago
danbettles at yahoo dot co dot uk ¶
4 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');
?>
Anonymous ¶
4 days 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
?>
snx ¶
11 months ago
if you want to use an object method as a callback parameter for any asynchronous action you have to transfer the reflection method and the object itself.
consider doing something like this:
<?php
class Callback extends ReflectionMethod{
protected $oObject;
public function __construct($oObject, $sMethod){
parent::__construct($oObject, $sMethod);
$this->oObject = $oObject;
$this->setAccessible(true); //to access even protected methods..
}
public function invoke(){
$this->invokeArgs($this->oObject, func_get_args());
}
}
?>
now you can easy create an reflector for the specific object method and pass it to any function...
<?php
class ClassA{
public function doSomething(){
$oCallback = new Callback($this, '_asyncCallback');
doAsyncCall($oCallback);
}
protected function _asyncCallback(...){
//...
}
}
function doAsyncCall($oCallback){
$oCallback->invoke(...);
}
?>
thecelavi at gmail dot com ¶
3 years ago
Right:
<?php
use AppCore as Core;
$oReflectionClass = new ReflectionClass('App\Core\Singleton');
?>
Wrong:
<?php
use AppCore as Core;
$oReflectionClass = new ReflectionClass('\App\Core\Singleton');
?>
