note 88405 added to language.oop5.reflection
| From: | muratyaman at gmail dot com | 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