PHP访问父类variables
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();
问题:如何在小孩中显示父variables? 预期的结果将回应'父母'
echo $this->bb;
该variables是inheritance的,不是私有的,所以它是当前对象的一部分。
以下是有关使用parent::
更多信息的更多信息:
使用parent::
当你想添加额外的function,从父类的方法。 例如,设想一个Airplane
类:
class Airplane { private $pilot; public function __construct( $pilot ) { $this->pilot = $pilot; } }
现在假设我们想要创build一种新型的也有导航器的飞机。 您可以扩展__construct()方法来添加新的function,但仍然使用父级提供的function:
class Bomber extends Airplane { private $navigator; public function __construct( $pilot, $navigator ) { $this->navigator = $navigator; parent::__construct( $pilot ); // Assigns $pilot to $this->pilot } }
通过这种方式,您可以遵循DRY的开发原则 ,但仍可提供您所需的全部function。
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();`
用parent::$bb;
您尝试检索用$bb
的值定义的静态常量。
相反,做:
echo $this->bb;
注意:如果B是唯一调用它的类,则不需要调用parent::_construct
。 不要在B类中声明__construct。
只是回声它,因为它是inheritance
echo $this->bb;
$ bb现在已经成为B类的私有成员。
所以你访问$ 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();
父类的所有属性和方法都是在子类中inheritance的,所以理论上你可以在子类中访问它们,但要小心使用类中的protected
关键字,因为它在子类中使用时会引发致命错误。
如php.net中所提到的
属性或方法的可见性可以通过在声明前加上public,protected或private关键字来定义。 宣布公开的类成员可以随处访问。 声明保护的成员只能在类本身以及inheritance类和父类中访问。 声明为私有的成员只能由定义该成员的类访问。