ReflectionClass::getDefaultProperties()
(PHP 5, PHP 7)
获取默认属性
说明
public ReflectionClass::getDefaultProperties(void): array
获取类的默认属性(包括了继承的属性)。
Note:This method only works for static properties when used on internal classes. The default value of a static class property can not be tracked when using this method on user defined classes.
参数
此函数没有参数。
返回值
默认属性的数组,其键是属性的名称,其值是属性的默认值或者在属性没有默认值时是NULL
。这个函数不区分静态和非静态属性,也不考虑可见性修饰符。
范例
Example #1ReflectionClass::getDefaultProperties()例子
<?php class Bar { protected $inheritedProperty = 'inheritedDefault'; } class Foo extends Bar { public $property = 'propertyDefault'; private $privateProperty = 'privatePropertyDefault'; public static $staticProperty = 'staticProperty'; public $defaultlessProperty; } $reflectionClass = new ReflectionClass('Foo'); var_dump($reflectionClass->getDefaultProperties()); ?>
以上例程会输出:
array(5) { ["staticProperty"]=> string(14) "staticProperty" ["property"]=> string(15) "propertyDefault" ["privateProperty"]=> string(22) "privatePropertyDefault" ["defaultlessProperty"]=> NULL ["inheritedProperty"]=> string(16) "inheritedDefault" }
参见
- ReflectionClass::getProperties() 获取一组属性
- ReflectionClass::getStaticProperties() 获取静态(static)属性
- ReflectionClass::getProperty() 获取类的一个属性的 ReflectionProperty
runaurufu is not quite right, get_class_vars() does not return protected params, while this one does. Thus it's extremely useful when having an abstract parent class and protected properties overriding in children. For example, I use a class factory and one of the children has some static test methods that still need to output a paramether name, like $this->name, etc. With this example code, one can use static::getNotStaticProperty('name'), but not get_class_vars('name'). Try it: trait static_reflector { /* * a purely static function that returns default properties of the non-static instance of the same class */ static protected function getNonStaticProperty($key) { $me = get_class(); $reflectionClass = new \ReflectionClass($me); $properties_list = $reflectionClass->getDefaultProperties(); if (isset($properties_list[$key])) return $var_name = $properties_list[$key]; else throw new RuntimeException("BUG: Unable to reflect non-static property '{$key}' from default properties of class {$me}"); } } class a { use \static_reflector; protected $key_a = 'test ok'; public static function test() { echo static::getNonStaticProperty('key_a')."\n"; try { print static::getNonStaticProperty('key_b'); echo "FAIL No exception thrown"; } catch (RuntimeException $e) { echo "OK ".$e->getMessage(); } } } echo get_class_vars('a')['key_a']; a::test(); this will return: Notice: Undefined index: key_a in ... test ok OK BUG: Unable to reflect non-static property 'key_b' from default properties of class a ps: Yes, this is copied from a unit test.
Worth noting that it will not return private parameters of parent class... so it works exactly as get_class_vars or get_object_vars
This will return all properties in a class and any parent classes. The array will have keys set to the property names and empty values.