note 88405 added to language.oop5.reflection

From: Date: Thu, 22 Jan 2009 15:47:08 +0000
Subject: note 88405 added to language.oop5.reflection
Groups: php.notes 
Request: Send a blank email to php-notes+get-149664@lists.php.net to get a copy of this message
Some may find this useful. <?php /** * 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 <b>public, private, protected, static</b> * @return array */ function getClassProperties($className, $types='public'){ $ref = new ReflectionClass($className); $props = $ref->getProperties(); $props_arr = array(); foreach($props as $prop){ $f = $prop->getName(); if($prop->isPublic() and (stripos($types, 'public') === FALSE)) break; if($prop->isPrivate() and (stripos($types, 'private') === FALSE)) break; if($prop->isProtected() and (stripos($types, 'protected') === FALSE)) break; if($prop->isStatic() and (stripos($types, 'static') === FALSE)) break; $props_arr[$f] = $prop; } if($parentClass = $ref->getParentClass()){ $parent_props_arr = getClassProperties($parentClass->getName());//RECURSION if(count($parent_props_arr) > 0) $props_arr = array_merge($parent_props_arr, $props_arr); } return $props_arr; } //USAGE class A{ public $a1; function abc(){ //do something } } class AA extends A{ public $a2; function edf(){ //do something } } class AAA extends AA{ //may not have extra properties, but may have extra methods function ghi(){ //ok } } //$ref = new ReflectionClass('AAA'); $props = $ref->getProperties();//This will get no properties! $props_arr = getClassProperties('AAA', 'public');//Use this var_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) */ ?> ---- Server IP: 92.48.74.199 Probable Submitter: 82.144.250.86 ---- Manual Page -- http://www.php.net/manual/en/language.oop5.reflection.php Edit -- https://master.php.net/note/edit/88405 Del: integrated -- https://master.php.net/note/delete/88405/integrated Del: useless -- https://master.php.net/note/delete/88405/useless Del: bad code -- https://master.php.net/note/delete/88405/bad+code Del: spam -- https://master.php.net/note/delete/88405/spam Del: non-english -- https://master.php.net/note/delete/88405/non-english Del: in docs -- https://master.php.net/note/delete/88405/in+docs Del: other reasons-- https://master.php.net/note/delete/88405 Reject -- https://master.php.net/note/reject/88405 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#149664) next »