我需要父类来访问其子属性:
class Parent {
private $_fields = null;
public function do_something() {
// Access $_fields and $child_var here
}
}
class Child extends Parent {
private $child_var = 'hello';
}
$child = new Child();
$child->do_something();
从子范围修改$_fields
时,它在父范围内仍为null
。当尝试使用$this->child_var
从父作用域访问$ child_var时,它当然是未定义的。
我没有找到任何类似“功能集”的内容,只会在子类中复制...
答案 0 :(得分:13)
查看有关visibility的文章。
基本上,您无法访问父级private
属性/方法,父级也无法访问其子级。但是,您可以声明您的属性/方法protected
。
class Parent {
protected $_fields = null;
public function do_something() {
// Access $_fields and $child_var here
}
}
class Child extends Parent {
protected $child_var = 'hello';
}
$child = new Child();
$child->do_something();
答案 1 :(得分:8)
尝试从base(父)类访问子值是一个糟糕的设计。如果将来有人会根据您的父类创建另一个类,忘记创建您尝试在父类中访问的特定属性,该怎么办?
如果你需要做类似的事情,你应该在父类中创建属性,然后在子类中设置它:
class Parent
{
protected $child_var;
private $_fields = null;
public function do_something()
{
// Access $_fields and $child_var here
//access it as $this->child_var
}
}
class Child extends Parent
{
$child_var = 'hello';
}
$child = new Child();
$child->do_something();
基本上在父母中你不应该引用特定于孩子的内容,因为你不能确定它会在那里!
如果必须,你应该使用抽象: