仅检索子类的属性

时间:2013-06-20 13:50:51

标签: php class inheritance properties

我有一个像

这样的课程
class parent{
   public $foo;
}

class child extends parent{
   public $lol;

    public function getFields()
    {
        return array_keys(get_class_vars(__CLASS__));
    }
}

我得到一个包含子属性的数组...

array('foo','lol'); 

有一个简单的解决方案只能从子类中获取属性吗?

2 个答案:

答案 0 :(得分:4)

发布在How do you iterate through current class properties (not inherited from a parent or abstract class)?

的链接中
public function iterate()
{
  $refclass = new ReflectionClass($this);
  foreach ($refclass->getProperties() as $property)
  {
    $name = $property->name;
    if ($property->class == $refclass->name)
      echo "{$property->name} => {$this->$name}\n";
  }
}

这是伟大的解决方案投票和收藏!你!谁曾经与这个联系过!

答案 1 :(得分:3)

尝试这种方法(可能包含伪PHP代码:))

class parent{
   public $foo;

   public function getParentFields(){
        return array_keys(get_class_vars(__CLASS__));
   }
}

class child extends parent{
   public $lol;

    public function getFields()
    {   
        $parentFields = parent::getParentFields();
        $myfields = array_keys(get_class_vars(__CLASS__));

        // just subtract parentFields from MyFields and you get the properties only exists on child

        return the diff
    }
}

使用parent :: getParentFields()函数确定哪些字段是父字段的想法。