百科狗-知识改变命运!
--

ReflectionClass::getDefaultProperties() - php 反射机制

梵高1年前 (2023-11-21)阅读数 26#技术干货
文章标签属性

ReflectionClass::getDefaultProperties()

(PHP 5, PHP 7)

获取默认属性

说明

publicReflectionClass::getDefaultProperties(void): array

ReflectionClass::getDefaultProperties() - php 反射机制

获取类的默认属性(包括了继承的属性)。

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)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)