Php 如何遍历当前类属性(不是从父类或抽象类继承的)?

Php 如何遍历当前类属性(不是从父类或抽象类继承的)?,php,class,properties,iteration,Php,Class,Properties,Iteration,我知道PHP5将允许您迭代类的属性。但是,如果该类扩展了另一个类,那么它也将包括父类中声明的所有属性。没关系,没什么可抱怨的 但是,我始终将SELF理解为指向当前类的指针,而$this也指向当前对象(包括从父对象继承的内容) 是否有任何方法可以只遍历当前类的属性。我问这个的原因。。。。我正在使用CI并遍历$this,其中包括大量我不需要的父属性 <?php class parent { public $s_parent = "Parent sez hi!"; public

我知道PHP5将允许您迭代类的属性。但是,如果该类扩展了另一个类,那么它也将包括父类中声明的所有属性。没关系,没什么可抱怨的

但是,我始终将SELF理解为指向当前类的指针,而$this也指向当前对象(包括从父对象继承的内容)

是否有任何方法可以只遍历当前类的属性。我问这个的原因。。。。我正在使用CI并遍历$this,其中包括大量我不需要的父属性

<?php

class parent 
{
   public $s_parent = "Parent sez hi!";
   public $i_lucky_number = 6;
}

class child extends parent
{
   public $s_child = "Child sez hi!";
   public $s_foobar = "What What!!";
   public $i_lucky_number = 7;

   public iterate()
   {
      foreach ($this as $s_key => $m_val)
      {
          echo "$s_key => $m_val<br />\n";
      }
   }

}

$o_child = new child();
$o_child->iterate()
我不想看到“s_parent=>parent sez hi!”

我只想遍历当前类的属性。不是那些在别处继承的


提前感谢。

使用反射方法,您可以执行以下操作:

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";
  }
}

看起来不错。还没来得及测试。我会再打给你的。那父类中的
private$variable
呢??!!伊姆霍,杰西卡在评论中更清晰的回答。
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";
  }
}