PHP - 获取类公共变量?

时间:2010-07-22 13:26:25

标签: php oop

请考虑以下代码。

class A {
  public function __construct() {

  }
}

class B extends A {
  public $a = "a";
  public $b = "b";
  public $c = "c";
}

如何从父类中获取B类的公共变量而不确切知道它们是什么?

6 个答案:

答案 0 :(得分:8)

class A {
   public $d;
   public function __construct() {
      $reflect = new ReflectionClass($this);
      $props = $reflect->getProperties(ReflectionProperty::IS_PUBLIC);
      var_dump($props);
   }
}

class B extends A {
  public $a = "a";
  private $b = "b";
  public $c = "c";
}
new B();

输出(注意没有'b',但A的公共'd'在那里,提到它在A中声明):

array(3) {
  [0]=>
  &object(ReflectionProperty)#3 (2) {
    ["name"]=>
    string(1) "a"
    ["class"]=>
    string(1) "B"
  }
  [1]=>
  &object(ReflectionProperty)#4 (2) {
    ["name"]=>
    string(1) "c"
    ["class"]=>
    string(1) "B"
  }
  [2]=>
  &object(ReflectionProperty)#5 (2) {
    ["name"]=>
    string(1) "d"
    ["class"]=>
    string(1) "A"
  }
}

答案 1 :(得分:2)

在A中创建B的实例,然后使用

http://www.php.net/manual/en/reflectionclass.getproperties.php

无论如何,你想做什么?

答案 2 :(得分:0)

将B-Class-Object注入A-Class-Object:

class A {
    public $b;

    public function __construct(B $b_object) {
        $this->b = $b;
    }
}

class B {
  public $a = "a";
  public $b = "b";
  public $c = "c";
}

所以构造函数在这里等待B的Objekt。现在让我们使用它。

$b = new B();
$a = new A($b);

$a->b->a;
$a->b->b;
$a->b->c

编辑: 对不起,我没有看到B级扩展到A级。所以忘记我的解决方案:)

答案 3 :(得分:0)

子类从超类继承。就像父亲没有从女儿那里继承任何基因一样,只给予他们,这是不可能的。嗯,从技术上讲,它是,但它不是实现面向对象行为的正确方法。

我建议将变量赋给超类,这样两个类都可以访问它,虽然我不确定你使用它是什么。

希望有所帮助!

答案 4 :(得分:0)

class A {        
    public function __construct() {   
        $array = get_class_vars('B'); // public vars of class B
   }
}

class B extends A {    
    public $a = "a";
    public $b = "b";
    public $c = "c";
}

答案 5 :(得分:-2)

如果B类扩展 A类,我认为它对A类没有任何意义,因为它能够访问其子级的公共变量。

编辑如果投票给我的人会推理他们的决定,我将不胜感激,谢谢。