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'
9条答案
按热度按时间23c0lvtd1#
该变量是继承的,不是私有的,因此它是当前对象的一部分。
以下是针对您请求的有关使用
parent::
的更多信息的附加信息:当你想给父类的方法添加额外的功能时,使用
parent::
。例如,假设一个Airplane
类:现在假设我们想创建一个新的飞机类型,它也有一个导航器。您可以扩展__construct()方法来添加新功能,但仍然使用父对象提供的功能:
通过这种方式,您可以遵循DRY principle的开发,但仍然可以提供您想要的所有功能。
wqsoz72f2#
既然是继承的就回显吧
cczfrluj3#
使用
parent::$bb;
,尝试检索使用$bb
的值定义的静态常量。相反,请执行以下操作:
**注意:**如果B是唯一调用
parent::_construct
的类,则不需要调用parent::_construct
。不要在B类中声明__构造。nhn9ugyo4#
vaqhlq815#
$bb在扩展了类A之后现在已经成为类B的成员。
所以你访问
$bb
就像它是B类的属性一样。q9rjltbz6#
父类的所有属性和方法都在子类中继承,所以理论上你可以在子类中访问它们,但是要注意在你的类中使用
protected
关键字,因为它在子类中使用时会抛出致命错误。如php.net中所述
属性或方法的可见性可以通过在声明前加上关键字public、protected或private来定义。声明为public的类成员可以在任何地方访问。声明为protected的成员只能在类本身内以及由继承类和父类访问。声明为private的成员只能由定义该成员的类访问。
flmtquvp7#
jaql4c8m8#
通过父类构造函数,可以将数据从子类传递给父类。请看下面的例子,以便更好地理解
h43kikqp9#
为测试更改可见性私有或受保护