private static function getPropertyReflection($object, $propertyName)
{
$reflected = new ReflectionObject($object);
$classHierarchy = array();
do {
try {
$property = $reflected->getProperty($propertyName);
$property->setAccessible(true);
return $property;
} catch (ReflectionException $e) {
$classHierarchy[] = $reflected->getName();
$e = PropertyReflectionException::propertyNotExistsInHierarchy($propertyName, $e, $classHierarchy);
}
} while ($reflected = $reflected->getParentClass());
throw $e;
}