I had the need to recursive merge the results from a subclass with all of it's parents, and this was the resulting code:
<?php
function GetStaticPropertiesRecursive($class) {
$currentClass = $class;
$joinedProperties = array();
do {
$reflection = new ReflectionClass($class);
$staticProperties = $reflection->getStaticProperties();
foreach ($staticProperties as $name => $value) {
if (is_array($value)) {
if (isset($joinedProperties[$name]))
$joinedProperties[$name] = array_merge($value, $joinedProperties[$name]);
else
$joinedProperties[$name] = $value;
} else {
if (isset($joinedProperties[$name]))
$joinedProperties[$name][] = $value;
else
$joinedProperties[$name] = array($value);
}
}
} while ($class = get_parent_class($class));
return $joinedProperties;
}
Using this function:
class base {
public static $Test = array("foo1", "foo2");
}
class sub extends base {
public static $Test = "sub";
}
print_r(GetStaticPropertiesRecursive("sub"));
?>
That outputs:
Array
(
[Test] => Array
(
[0] => foo1
[1] => foo2
[2] => sub
)
)
The merge follows the rules of array_merge on duplicate keys.
ReflectionClass::getStaticProperties
(PHP 5)
ReflectionClass::getStaticProperties — Gets static properties
Opis
public array ReflectionClass::getStaticProperties
( void
)
Get the static properties.
Ostrzeżenie
Ta funkcja jest obecnie nieudokumentowana, dostępna jest jedynie lista jej argumentów.
Parametry
Ta funkcja nie posiada parametrów.
Zwracane wartości
The static properties, as an array.
Zobacz też:
- ReflectionClass::getStaticPropertyValue() - Gets static property value
- ReflectionClass::setStaticPropertyValue() - Sets static property value
jlennox @ google mail
08-May-2010 10:03
