note 88405 modified in language.oop5.reflection by danbrown

From: Date: Fri, 23 Jan 2009 16:11:41 +0000
Subject: note 88405 modified in language.oop5.reflection by danbrown
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-149696@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)) 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());//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) */ ?> --was-- 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) */ ?> http://php.net/manual/en/language.oop5.reflection.php

« previous php.notes (#149696) next »