请参阅以下示例(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的新手并且有点无知。
这里访问parent属性我正在使用该类的一个实例,这似乎是错误的:S(不需要我是孩子)。是否有一种简单的方法,以便我可以将父属性与子属性同步,并且可以直接访问$ this-> anotherP而无需使用$ this-> parent-> anotherP?
答案 0 :(得分:30)
当您的Child
班级扩展您的Parent
班级时,public
班级中的protected
或Parent
的每个属性和方法都会被看到在Child
类中,好像它们是在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
这意味着$data
类中定义的MyParent
属性,并在同一MyParent
类的方法中初始化,Child
类可以访问该属性,就像这是它自己的。
为简单起见:因为Child
“是一个”MyParent
,它不需要指向...本身; - )
答案 1 :(得分:0)
这可以节省您几个小时的搜索时间。
请记住:您的Child类仅继承Parent类中的DEFINED属性...因此,如果使用Parent类实例化对象,然后使用数据填充它,那么这些数据将不会在您的子类中可用...
当然,这是非常明显的,但我猜其他人可能遇到同样的问题。
一个超级简单的解决方案是不扩展任何东西,只需通过构造函数将父类的$对象传递给子类。这样,您就可以访问由父类
生成的对象的所有属性和方法实施例
class child {
public parentObject;
public function __construct($parentObject) {
$this->parentObject = $parentObject;
}
}
如果$ parentObject具有公共属性$ name,那么您可以使用以下函数在子类中访问它:
public function print_name() {
echo $this->parentObject->name;
}
答案 2 :(得分:-2)
这应该有用..
class Child extends Parent
{
private function myMethod()
{
return $this->_anotherP;
}
}
因为_anotherP它受保护,所以每个派生类都可以访问它,但它不在另一个对象中,它是同一个对象。
然而,让吸气者在父母身上成为一个明智的选择。