Please ignore my previous note. I didn't fully understand what the previous notes were referring to as "runtime". I now see they were referring to a slightly different question.
Apologies!
ReflectionProperty Sınıfı
(PHP 5)
Giriş
ReflectionProperty sınıfı bir sınıfın özellikleri hakkında bilgi edinilmesini sağlar.
Sınıf Sözdizimi
Özellikler
- name
-
Özelliğin ismi. Salt-okunur olup, bir yazma çabası ReflectionException istisnasına yol açar.
- class
-
Özelliği tanımlayan sınıfın ismi. Salt-okunur olup, bir yazma çabası ReflectionException istisnasına yol açar.
Öntanımlı Sabitler
ReflectionProperty Değiştiricileri
İçindekiler
- ReflectionProperty::__clone — Özelliği kopyalar
- ReflectionProperty::__construct — Bir ReflectionProperty nesnesi oluşturur
- ReflectionProperty::export — Özelliği ihraç eder
- ReflectionProperty::getDeclaringClass — Bildiren sınıfı döndürür
- ReflectionProperty::getDocComment — Bilgilendirici açıklamaları döndürür
- ReflectionProperty::getModifiers — Değiştirici sayısını döndürür
- ReflectionProperty::getName — Özelliğin ismini döndürür
- ReflectionProperty::getValue — Özelliğin değerini döndürür
- ReflectionProperty::isDefault — Öntanımlı değer mi atanmış diye bakar
- ReflectionProperty::isPrivate — Özellik private olarak mı bildirilmiş diye bakar
- ReflectionProperty::isProtected — Özellik protected olarak mı bildirilmiş diye bakar
- ReflectionProperty::isPublic — Özellik public olarak mı bildirilmiş diye bakar
- ReflectionProperty::isStatic — Özellik duruk mu diye bakar
- ReflectionProperty::setAccessible — Özelliği erişilebilir kılar
- ReflectionProperty::setValue — Özelliğe değer atar
- ReflectionProperty::__toString — Dizgesel tepkiyi görselleştirir
james at digitaledgeit dot com dot au
29-Aug-2010 08:30
james at digitaledgeit dot com dot au
29-Aug-2010 08:22
You CAN reflect an object at runtime:
<?php
class Abc {
private $_abc = 123;
public function __construct($abc) {
$this->_abc = $abc;
}
}
$obj = new Abc('def');
$refl = new ReflectionObject($obj);
$prop = $refl->getProperty('_abc');
$prop->setAccessible(true);
echo $prop->getValue($obj);
?>
This outputs 'def', the value of _abc set at runtime.
rasmus at mindplay dot dk
30-Jul-2010 05:06
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...
CodeDuck at gmx dot net
08-Feb-2006 08:07
Beware, the Reflection reflects only the information right after compile time based on the definitions, not based on runtime objects. Might be obvious, wasn't for me, until the app throws the exception at my head.
Example:
<?php
class A {
public $a = null;
function set() {
$this->foo = 'bar';
}
}
$a = new A;
$a->set();
// works fine
$Reflection = new ReflectionProperty($a, 'a');
// throws exception
$Reflection = new ReflectionProperty($a, 'foo');
?>
