Я не думаю, что возможно даже получить доступ к "родительской" версии $iId
: вы на самом деле не переопределяете ее в дочернем классе: вы только можете изменить значение, определенное в класс родителей.
Чтобы все было очень просто: когда вы объявляете класс Form_2
, который extends Form_1
, он берет все свойства и методы Form_2
и помещает их в Form_1
, переопределяя то, что там уже существовало.
Больше нет «двух разных классов»: есть только один результирующий объект, это одновременно Form_1
и Form_2
.
И вот пример, который, как я надеюсь, поможет понять, что я имею в виду:
class Form_Abstract {}
class Form_1 extends Form_Abstract {
public $iId = 1;
public function methodInParent() {
var_dump($this);
}
}
class Form_2 extends Form_1 {
public $iId = 2;
public function tryingToGetParentProperty() {
var_dump(parent::$iId);
}
}
$form2 = new Form_2();
$form2->methodInParent();
$form2->tryingToGetParentProperty();
Используя эту часть кода, вызов $form2->methodInParent()
даст вам:
object(Form_2)#1 (1) {
["iId"]=>
int(2)
}
т.е.. даже если вызов / выполнение метода, определенного в родительском классе, свойство $iId
остается значением, определенным в дочернем классе: существует только одна версия этого свойства!
И звонок на $form2->tryingToGetParentProperty()
доставит вам:
Fatal error: Access to undeclared static property: Form_1::$iId
Так как static
в Form_1
.
нет свойства *1030*.
Я полагаю, что решение, позволяющее избежать этой ситуации, было бы объявить $iId
как static
- но учтите, что это изменит смысл вашего кода и его поведение!
т.е. переменная static
будет использоваться всеми экземплярами класса, что, вероятно, не то, что вам нужно ^^