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

时间:2011-05-07 16:33:49

标签: php oop

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

我可以通过函数传递道具,但这需要更改一组我不愿意的函数。我正在使用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);
    }

1 个答案:

答案 0 :(得分:2)

简答:是。

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

详细答案:

他们写的方式是不可行的,因为A级对孩子没有任何线索。 但是,如果您在A类中有一个setter,那么您可以使用SPL:

class A{
  public function accessProps($child){

    $reflect = new ReflectionClass($child);
    $props   = $reflect->getProperties(ReflectionProperty::IS_PUBLIC |  ReflectionProperty::IS_PROTECTED);

   }
}