(PHP 5, PHP 7, PHP 8)
La clase ReflectionProperty proporciona información sobre las propiedades de las clases.
Nombre de la propiedad. Solo lectura, lanza una ReflectionException al intentar escribir.
Nombre de la clase donde se definió la propiedad. Solo lectura, lanza una ReflectionException al intentar escribir.
ReflectionProperty::IS_STATIC
int
Indica que la propiedad es
static.
Anterior a PHP 7.4.0, el valor era 1.
ReflectionProperty::IS_READONLY
int
Indica que la propiedad es readonly. Disponible a partir de PHP 8.1.0.
ReflectionProperty::IS_PUBLIC
int
Indica que la propiedad es
pública.
Anterior a PHP 7.4.0, el valor era 256.
ReflectionProperty::IS_PROTECTED
int
Indica que la propiedad es
protegida.
Anterior a PHP 7.4.0, el valor era 512.
ReflectionProperty::IS_PRIVATE
int
Indica que la propiedad es
privada.
Anterior a PHP 7.4.0, el valor era 1024.
ReflectionProperty::IS_ABSTRACT
int
ReflectionProperty::IS_PROTECTED_SET
int
ReflectionProperty::IS_PRIVATE_SET
int
ReflectionProperty::IS_VIRTUAL
int
ReflectionProperty::IS_FINAL
int
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.
| Versión | Descripción |
|---|---|
| 8.4.0 | Las constantes de clase ahora están tipadas. |
| 8.4.0 |
Se añadieron ReflectionProperty::IS_VIRTUAL ,
ReflectionProperty::IS_PRIVATE_SET ,
ReflectionProperty::IS_PROTECTED_SET ,
ReflectionProperty::IS_ABSTRACT ,
y ReflectionProperty::IS_FINAL .
|
| 8.0.0 | ReflectionProperty::export() ha sido eliminada. |
I think a more accurate explanation is this:
The Reflection classes are designed to reflect upon the source code of an application, not on any runtime information.
I think you misunderstand the ReflectionProperty constructor in your example above. The fact that it accepts an object as argument is just a convenience feature - you are actually inspecting the class of that object, not the object itself, so it's basically equivalent to:
<?php
// works fine
$Reflection = new ReflectionProperty(get_class($a), 'a');
// throws exception
$Reflection = new ReflectionProperty(get_class($a), 'foo');
?>
Getting the class of the object you're passing in is implied, since inspecting a defined property is the purpose of this class.
In your example, $a->foo is a dynamic member - it is not defined as a member of class, so there is no defining class reference, line number, default value, etc. - which means, there is nothing to reflect upon.
Clearly this very useful library could use some real documentation...