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 — Obtiene las propiedades estáticas
Descripción
public array ReflectionClass::getStaticProperties
( void
)
Devuelve las propiedades estáticas.
Advertencia
Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.
Parámetros
Esta función no tiene parámetros.
Valores devueltos
Las propiedades estáticas, en un array.
Ver también
- ReflectionClass::getStaticPropertyValue() - Obtiene el valor de una propiedad estática
- ReflectionClass::setStaticPropertyValue() - Establece el valor de una propiedad estática
jlennox @ google mail ¶
3 years ago
