从父作用域访问子属性

ldi*_*ual 15 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();
Run Code Online (Sandbox Code Playgroud)

$_fields从子范围修改,它仍然是null在父范围.当尝试使用父范围访问$ child_var时$this->child_var,它当然是未定义的.

我没有找到任何类似"函数集"的内容,只会在子类中复制...

gil*_*den 14

看一篇关于可见性的文章.

基本上,您无法访问父级的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();
Run Code Online (Sandbox Code Playgroud)


Dan*_*zyk 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(); 
Run Code Online (Sandbox Code Playgroud)

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

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

PHP抽象