从父作用域访问子属性

时间:2011-09-19 10:49:57

标签: php oop

我需要父类来访问其子属性:

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时,它当然是未定义的。

我没有找到任何类似“功能集”的内容,只会在子类中复制...

2 个答案:

答案 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(); 

基本上在父母中你不应该引用特定于孩子的内容,因为你不能确定它会在那里!

如果必须,你应该使用抽象:

PHP Abstraction

相关问题