代码之家  ›  专栏  ›  技术社区  ›  Mark Tomlin

在类中查找属性的范围

  •  5
  • Mark Tomlin  · 技术社区  · 15 年前
    class ParentClass
    {
        public function list()
        {
            foreach ($this as $property => $value)
            {
                if (is_public($this->$property))
                    echo 'public: ';
                else if (is_protected($this->$property))
                    echo 'protected: ';
                echo "$property => $value" . PHP_EOL;
            }
        }
    }
    
    class ChildClass extends ParentClass
    {
        protected $Size = 4;
        protected $Type = 4;
        public $SubT = 1;
        public $UVal = NULL;
    }
    
    $CC = new ChildClass;
    $CC->list();
    
    1 回复  |  直到 15 年前
        1
  •  7
  •   Matthew    15 年前

    使用 ReflectionProperty

    <?php
    function P($obj, $name)
    {
      return new ReflectionProperty($obj, $name);
    }
    
    class Foo
    {
      public $a;
    
      public function __construct()
      {
        foreach (array_keys(get_object_vars($this)) as $name)
        {
          if (P($this, $name)->isPublic())
          {
            echo "Public\n";
          }
        }
      }
    }
    
    new Foo();
    
    ?>
    
    推荐文章