[英]Accessing Parent Class' property from child
请参见以下示例(PHP)
class Parent
{
protected $_property;
protected $_anotherP;
public function __construct($var)
{
$this->_property = $var;
$this->someMethod(); #Sets $_anotherP
}
protected function someMethod()
...
}
class Child extends Parent
{
protected $parent;
public function __construct($parent)
{
$this->parent = $parent;
}
private function myMethod()
{
return $this->parent->_anotherP; #Note this line
}
}
我是OOP的新手,有点无知。
在这里,我使用的是该类的实例来访问parents属性,这似乎是错误的:S(然后不需要成为i子代)。 有没有一种简单的方法,这样我就可以将父属性与子属性同步并可以直接访问$ this-> anotherP,而不必使用$ this-> parent-> anotherP?
当您的Child
类扩展您的Parent
类时, Child
类将看到在Parent
类中public
或protected
所有属性和方法,就像它们是在Child
类中定义的一样;反之亦然。
当Child
类extends
Parent
类时,可以将其视为“ Child
是Parent
” -这意味着Child
具有Parent
的属性,除非以其他方式重新定义了这些属性。
(顺便说一句,注意“ parent
”是PHP中的保留关键字,这意味着您不能使用该名称来命名类)
这是“父”类的简单示例:
class MyParent {
protected $data;
public function __construct() {
$this->someMethodInTheParentClass();
}
protected function someMethodInTheParentClass() {
$this->data = 123456;
}
}
这是“孩子”类:
class Child extends MyParent {
public function __construct() {
parent::__construct();
}
public function getData() {
return $this->data; // will return the $data property
// that's defined in the MyParent class
}
}
可以这样使用:
$a = new Child();
var_dump($a->getData());
然后您将得到输出:
int 123456
这意味着在MyParent
类中定义并在相同MyParent
类的方法中初始化的$data
属性可以由Child
类访问,就好像它是自己的一样。
为了简单MyParent
:由于Child
“是” MyParent
,它不需要保持指向...本身的指针;-)
这样可以节省您几个小时的搜索时间。
请记住:您的子类仅继承父类中定义的属性...因此,如果您使用父类实例化一个对象,然后用数据填充该对象,那么该数据将在您的子类中不可用...
这当然是非常明显的,但是我猜想其他人可能会遇到同样的问题。
一个超级简单的解决方案是不扩展任何内容,只需通过构造函数将父类的$ object传递给子类。 这样,您可以访问父类生成的对象的所有属性和方法
例
class child {
public parentObject;
public function __construct($parentObject) {
$this->parentObject = $parentObject;
}
}
如果您的$ parentObject具有公共属性$ name,则可以使用以下函数在子类内部访问它:
public function print_name() {
echo $this->parentObject->name;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.