Some may find this useful.
* Recursive function to get an associative array of class properties by property name => ReflectionProperty() object
* including inherited ones from extended classes
* @param string $className Class name
* @param string $types Any combination of public, private, protected, static
* @return array
*/functiongetClassProperties($className,$types='public'){$ref= newReflectionClass($className);$props=$ref->getProperties();$props_arr= array();
foreach($propsas$prop){$f=$prop->getName();
if($prop->isPublic() and (stripos($types,'public') ===FALSE)) continue;
if($prop->isPrivate() and (stripos($types,'private') ===FALSE)) continue;
if($prop->isProtected() and (stripos($types,'protected') ===FALSE)) continue;
if($prop->isStatic() and (stripos($types,'static') ===FALSE)) continue;$props_arr[$f] =$prop;
}
if($parentClass=$ref->getParentClass()){$parent_props_arr=getClassProperties($parentClass->getName());//RECURSIONif(count($parent_props_arr) >0)$props_arr=array_merge($parent_props_arr,$props_arr);
}
return$props_arr;
}//USAGEclassA{
public$a1;
functionabc(){//do something}
}
classAAextendsA{
public$a2;
functionedf(){//do something}
}
classAAAextendsAA{//may not have extra properties, but may have extra methodsfunctionghi(){//ok}
}//$ref = new ReflectionClass('AAA'); $props = $ref->getProperties();//This will get no properties!$props_arr=getClassProperties('AAA','public');//Use thisvar_dump($props_arr);/*
OUTPUT on PHP5.2.6:
array
'a1' =>
object(ReflectionProperty)[4]
public 'name' => string 'a1' (length=2)
public 'class' => string 'AAA' (length=3)
'a2' =>
object(ReflectionProperty)[3]
public 'name' => string 'a2' (length=2)
public 'class' => string 'AAA' (length=3)
*/?>