php扩展类不继承父类当前属性值

时间:2015-03-27 13:17:27

标签: php class oop

我对班级很新。我无法理解为什么我的扩展类不会继承它的父属性作为它们的集合。它似乎以构造函数值继承属性。

确保继承当前值的正确方法是什么?

class Form {

    public $data = array();
    public $TheValue;

    public function __construct($data) {  
        $this->data = $data;
    }

    public function UpdateTheValue($x){
        $this->TheValue = $x;
    }
}

class FormField extends Form {

    public function __construct() {  
        parent::__construct();
    }

}

$data = array(1,2,3);
$Form = new Form($data);
$Form->UpdateTheValue('the value should be this');
$FormField = new FormField();

这是$ FormField

的结果
FormField Object
(
    [TheValue] => 
    [data] => Array
        (
        [0] => 1
        [1] => 2
        [2] => 3
        )

)

你可以看到TheValue是空的。

谢谢。

1 个答案:

答案 0 :(得分:1)

这是因为FormField扩展了Form类,而不是 <{1}}类的实例

如果它按照你假设的方式工作,如果有Form类的2个实例,你认为应该怎么办?

Form

在您的示例中,您应该创建$dataA = array(1,2,3); $formA = new Form($dataA); $formA->UpdateTheValue('A'); $dataB = array(1,2,3); $formB = new Form($dataB); $formB->UpdateTheValue('B'); $formField = new FormField(); 类的实例,该实例具有其父级的所有属性:

FormField

但当然,为什么会出现&#34;表格字段&#34;扩展一个&#34;形式&#34;拥有它的属性?这些显然是两个不同的实体,它们有两个不同的目的。

我只能推测你实际想要实现的目标与此相似:

class Form {
    public $data = array();
    public $TheValue;

    public function __construct($data) {  
        $this->data = $data;
    }

    public function UpdateTheValue($x){
        $this->TheValue = $x;
    }
}

class FormField extends Form {}

$data = array(1,2,3);
$formField = new FormField($data);
$formField->UpdateTheValue('the value should be this');