我对班级很新。我无法理解为什么我的扩展类不会继承它的父属性作为它们的集合。它似乎以构造函数值继承属性。
确保继承当前值的正确方法是什么?
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是空的。
谢谢。
答案 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');