php 扩展 class 不继承 parents 当前 属性 值

php extended class not inheriting parents current property values

我对 classes 还很陌生。我不明白为什么我的扩展 class 不会继承它的 parent 属性,就像它们的集合一样。它似乎以其构造函数值继承属性。

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

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 为空。

谢谢。

那是因为 FormField 扩展了 Form class,而不是 Form class 的 实例 .

如果它按照您假设的方式工作,如果有 2 个 Form class 实例,您认为应该发生什么?

$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 class 的实例,它具有其父项的所有属性:

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');

但是当然,为什么 "form field" 扩展 "form" 以具有其属性? 这显然是两个不同的实体,服务于两个不同的实体目的。

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

<?php
class Form {
    private $fields = array();

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

    public function updateField($index, $value) {
        $this->fields[$index]->setValue($value);
    }
}

class FormField {
  private $value;

  public function __construct($value) {
    $this->setValue($value);
  }

  public function setValue($value) {
    $this->value = $value;
  }
}

$fields = array(
  new FormField('A'),
  new FormField('B'),
);

$form = new Form($fields);
var_dump($form);

$form->updateField(0, 'AAA');
$form->updateField(1, 'BBB');
var_dump($form);