PHP面向对象的继承 - 访问父的属性

时间:2014-02-07 19:19:24

标签: php oop inheritance

我需要在子类的函数内访问父元素的属性。可以使用parent::访问静态变量,但是当子类具有相同名称的变量时,如何访问非静态父变量?

class My_parent{
  $name = "Praeep";
}

class My_child extends My_parent {
  $name ="Nadeesha";

  function show_name() {
    // need to access $name of the parent just referring the parent variable 
  }
}

2 个答案:

答案 0 :(得分:0)

您可以使用protected修饰符在父类中声明变量,也可以提供getter。优选使用getter方法来确保封装。

class My_parent{
  private $name = "Praeep";
  public function getName() {
      return $this->name;
  }
}

class My_child extends My_parent {
  public function show_name() {
    echo $this->getName(); 
  }
} 

如果您还希望该属性是可变的,请考虑提供一个setter。

答案 1 :(得分:-2)

向父类添加构造函数,并在此函数中定义变量。

class My_parent{
  public $name;
  public function __construct(){
    $this->name= "Praeep";
  }
}

如果您的子类也具有构造函数,则需要手动调用父构造函数。但是,类不必具有构造函数,因此为了简单起见,我将其注释掉了。

class My_child extends My_parent {
  // public function __construct(){
  //   parent::__construct();
  // }
  public function show_name(){
    echo $this->name;
  }
}

$c=new My_child();
$c->show_name();

编辑:

实际上,你不需要父类中的构造函数。

class My_parent{
  public $name= "Praeep";
}

class My_child extends My_parent {

  public function show_name(){
    echo $this->name;
  }
}

$c=new My_child();
$c->show_name();
相关问题