class A {
private $aa;
protected $bb = 'parent bb';
function __construct($arg) {
//do something..
}
private function parentmethod($arg2) {
//do something..
}
}
class B extends A {
function __construct($arg) {
parent::__construct($arg);
}
function childfunction() {
echo parent::$bb; //Fatal error: Undefined class constant 'bb'
}
}
$test = new B($some);
$test->childfunction();
问题: 如何在孩子中显示父变量? 预期结果将回应'parent bb'
答案 0 :(得分:60)
echo $this->bb;
变量是继承的,不是私有的,因此它是当前对象的一部分。
以下是有关使用parent::
:
如果希望从父类添加额外功能,请使用parent::
。例如,想象一下Airplane
类:
class Airplane {
private $pilot;
public function __construct( $pilot ) {
$this->pilot = $pilot;
}
}
现在假设我们想要创建一种同样具有导航器的新型飞机。您可以扩展__construct()方法以添加新功能,但仍然可以使用父级提供的功能:
class Bomber extends Airplane {
private $navigator;
public function __construct( $pilot, $navigator ) {
$this->navigator = $navigator;
parent::__construct( $pilot ); // Assigns $pilot to $this->pilot
}
}
通过这种方式,您可以按照开发的DRY principle进行操作,但仍然可以提供所需的所有功能。
答案 1 :(得分:6)
只是回应它,因为它是继承的
echo $this->bb;
答案 2 :(得分:4)
class A {
private $aa;
protected $bb = 'parent bb';
function __construct($arg) {
//do something..
}
private function parentmethod($arg2) {
//do something..
}
}
class B extends A {
function __construct($arg) {
parent::__construct($arg);
}
function childfunction() {
echo parent::$this->bb; //works by M
}
}
$test = new B($some);
$test->childfunction();`
答案 3 :(得分:3)
使用parent::$bb;
,您尝试检索使用$bb
值定义的静态常量。
相反,请执行:
echo $this->bb;
注意:如果B是唯一调用它的类,则无需调用parent::_construct
。只是不要在B类中声明__construct。
答案 4 :(得分:2)
$ bb现在已经成为B类的私有成员,在扩展了受保护的A类之后。
所以你访问$ bb,就像它是B类的属性一样。
class A {
private $aa;
protected $bb = 'parent bb';
function __construct($arg) {
//do something..
}
private function parentmethod($arg2) {
//do something..
}
}
class B extends A {
function __construct($arg) {
parent::__construct($arg);
}
function childfunction() {
echo $this->bb;
}
}
$test = new B($some);
$test->childfunction();
答案 5 :(得分:1)
父类的所有属性和方法都在子类中继承,因此从理论上讲,您可以在子类中访问它们,但要注意在类中使用protected
关键字,因为它在使用时会引发致命错误儿童班。
如php.net
属性或方法的可见性 可以通过加前缀来定义 关键字public的声明, 受保护或私人。班级成员 声明公开可以访问 到处。成员宣布受保护 只能在课堂上访问 本身以及继承和父母 类。成员宣布为私人 只能由那个班级访问 定义成员。
答案 6 :(得分:1)
PHP Accessing Parent Class Protected Variable & Methods
class A {
protected $bb = 'parent bb';
protected function sayHello(){
echo 'Say Hello';
}
}
class B extends A {
public function childfunction() {
echo $this->bb.'<br>';
echo $this->sayHello();
}
}
$test = new B();
$test->childfunction();