代码之家  ›  专栏  ›  技术社区  ›  Kamil Szot

如何获取类的公共属性?

  •  5
  • Kamil Szot  · 技术社区  · 15 年前

    我不能简单地使用 get_class_vars() 因为我需要它与5.0.3之前的PHP版本一起使用(请参见 http://pl.php.net/get_class_vars 长洛格

    或者:我如何检查财产是否为公共财产?

    3 回复  |  直到 15 年前
        1
  •  7
  •   Kamil Szot    15 年前

    这可以通过反射来实现。

    <?php
    
    class Foo {
      public $alpha = 1;
      protected $beta = 2;
      private $gamma = 3;
    }
    
    $ref = new ReflectionClass('Foo');
    print_r($ref->getProperties(ReflectionProperty::IS_PUBLIC));
    

    结果是:

    Array
    (
        [0] => ReflectionProperty Object
            (
                [name] => alpha
                [class] => Foo
            )
    
    )
    
        2
  •  3
  •   MrWhite    10 年前

    或者你可以这样做:

    $getPublicProperties = create_function('$object', 'return get_object_vars($object);');
    var_dump($getPublicProperties($this));
    
        3
  •  1
  •   XLars    11 年前

    您可以使类实现迭代器聚合接口

    class Test implements IteratorAggregate
    {
        public    PublicVar01 = "Value01";
        public    PublicVar02 = "Value02";
        protected ProtectedVar;
        private   PrivateVar;
    
        public function getIterator()
        {
            return new ArrayIterator($this);
        }
    }
    
    
    $t = new Test()
    foreach ($t as $key => $value)
    {
        echo $key." = ".$value."<br>";
    }
    

    这将输出:

    PublicVar01 = Value01
    PublicVar02 = Value02