<?php
class A
{
private $data = array('one', 'two');
public function __construct()
{
}
}
class B extends A
{
public function __construct($value)
{
parent::__construct();
$this->patchWithReflect($this, 'data', $value);
}
public function patchWithReflect($object, $name, $value)
{
// Получаем информацию о родительском классе
// Получаем доступ к свойству
$data = $reflect->getProperty($name);
$data->setAccessible(true);
// Получаем старое
$dataA = $data->getValue($object);
// Устанавливаем новое
$dataA[] = $value;
$data->setValue($object, $dataA);
}
}
$bz = new B('z');
$bx = new B('x');
PD9waHAKCmNsYXNzIEEKewogICAgcHJpdmF0ZSAkZGF0YSA9IGFycmF5KCdvbmUnLCAndHdvJyk7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKICAgIHsKCiAgICB9Cn0KCmNsYXNzIEIgZXh0ZW5kcyBBCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdmFsdWUpCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgpOwogICAgICAgICR0aGlzLT5wYXRjaFdpdGhSZWZsZWN0KCR0aGlzLCAnZGF0YScsICR2YWx1ZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHBhdGNoV2l0aFJlZmxlY3QoJG9iamVjdCwgJG5hbWUsICR2YWx1ZSkKICAgIHsKICAgICAgICAvLyDQn9C+0LvRg9GH0LDQtdC8INC40L3RhNC+0YDQvNCw0YbQuNGOINC+INGA0L7QtNC40YLQtdC70YzRgdC60L7QvCDQutC70LDRgdGB0LUKICAgICAgICAkcmVmbGVjdCA9IG5ldyBSZWZsZWN0aW9uQ2xhc3MoZ2V0X3BhcmVudF9jbGFzcygkb2JqZWN0KSk7CiAgICAgICAgLy8g0J/QvtC70YPRh9Cw0LXQvCDQtNC+0YHRgtGD0L8g0Log0YHQstC+0LnRgdGC0LLRgwogICAgICAgICRkYXRhID0gJHJlZmxlY3QtPmdldFByb3BlcnR5KCRuYW1lKTsKICAgICAgICAkZGF0YS0+c2V0QWNjZXNzaWJsZSh0cnVlKTsKICAgICAgICAvLyDQn9C+0LvRg9GH0LDQtdC8INGB0YLQsNGA0L7QtQogICAgICAgICRkYXRhQSA9ICRkYXRhLT5nZXRWYWx1ZSgkb2JqZWN0KTsKICAgICAgICAvLyDQo9GB0YLQsNC90LDQstC70LjQstCw0LXQvCDQvdC+0LLQvtC1CiAgICAgICAgJGRhdGFBW10gPSAkdmFsdWU7CiAgICAgICAgJGRhdGEtPnNldFZhbHVlKCRvYmplY3QsICRkYXRhQSk7CiAgICB9Cgp9CgokYnogPSBuZXcgQigneicpOwokYnggPSBuZXcgQigneCcpOwp2YXJfZHVtcCgkYngpOwp2YXJfZHVtcCgkYnopOw==