在PHP中,有没有办法从父类中的子类访问属性


in php, is there a way to access properties from child class in parent class

我很确定没有办法,但想检查/确认。

可以通过函数传入道具,但这需要更改一组我宁愿不更改的函数。我正在使用 php 5.3。

例如:

<?php
class A{
  public function accessProps(){
    echo "about to show props<br />";
    // cant access, child::?
    var_dump($this->props);
   }
}
class B extends A{
   //want this accessible in parent class
   public $props=array('green','blue','red');
   public function sayHello(){
      echo 'hello ';
      var_dump($this->props);
  }
}
$b=new B();
$a=new A();
$b->sayHello();
$a->accessProps();
?>

编辑 - 我喜欢反射的想法,但对于只为这一种情况添加反射会有点犹豫。也许最简单/最简单的方法是在需要它的类中传递道具,并将其作为构造器中的可选参数。这样,不需要它的类就没有变化,而确实需要它的类也无需访问。我认为应该这样做。喜欢这个:

class A{
   public function __construct($props=null){
       if($props){
          $this->props=$props;
       }
   }
}

class B extends A{
   public $props=array('green','blue','red');
    public function __construct(){
        parent::__construct($this->props);
    }

简短回答是。

更长的答案,你这样做的方式,没有。

详细答案:

他们的方式是你写的,这是不可行的,因为A班对孩子一无所知。但是如果你在A类中有一个二传手,那么你可以这样使用SPL:

class A{
  public function accessProps($child){
    $reflect = new ReflectionClass($child);
    $props   = $reflect->getProperties(ReflectionProperty::IS_PUBLIC |  ReflectionProperty::IS_PROTECTED);
   }
}