class A {
public static $prop = array(
"common" => 1,
"a" => 1,
);
public static function getProp() {
$parent_prop = array();
$ref = new ReflectionClass(get_called_class());
$ref_parent = $ref->getParentClass();
if ( $ref_parent ) {
$parent_class = $ref_parent->getName();
$parent_prop = $parent_class::getProp();
}
return array_merge($parent_prop, static::$prop);
}
}
class B extends A {
public static $prop = array(
"common" => 2,
"b" => 2,
);
}
class C extends B {
public static $prop = array(
"common" => 3,
"c" => 3,
);
}
var_dump(A::getProp());
// array(2) {
// ["common"]=>
// int(1)
// ["a"]=>
// int(1)
// }
var_dump(B::getProp());
// array(3) {
// ["common"]=>
// int(2)
// ["a"]=>
// int(1)
// ["b"]=>
// int(2)
// }
var_dump(C::getProp());
// array(4) {
// ["common"]=>
// int(3)
// ["a"]=>
// int(1)
// ["b"]=>
// int(2)
// ["c"]=>
// int(3)
// }
動作確認
php5.3.29, php5.5.4, php5.6.0