ReflectionClass::getDefaultProperties() - php 反射机制
ReflectionClass::getDefaultProperties()
(PHP 5, PHP 7)
获取默认属性
说明
publicReflectionClass::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()例子
以上例程会输出:
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.
鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com
免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)
图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!
内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)