fork(1) download
  1. <?php
  2.  
  3. class A
  4. {
  5. private $data = array('one', 'two');
  6.  
  7. public function __construct()
  8. {
  9.  
  10. }
  11. }
  12.  
  13. class B extends A
  14. {
  15. public function __construct($value)
  16. {
  17. parent::__construct();
  18. $this->patchWithReflect($this, 'data', $value);
  19. }
  20.  
  21. public function patchWithReflect($object, $name, $value)
  22. {
  23. // Получаем информацию о родительском классе
  24. $reflect = new ReflectionClass(get_parent_class($object));
  25. // Получаем доступ к свойству
  26. $data = $reflect->getProperty($name);
  27. $data->setAccessible(true);
  28. // Получаем старое
  29. $dataA = $data->getValue($object);
  30. // Устанавливаем новое
  31. $dataA[] = $value;
  32. $data->setValue($object, $dataA);
  33. }
  34.  
  35. }
  36.  
  37. $bz = new B('z');
  38. $bx = new B('x');
  39. var_dump($bx);
  40. var_dump($bz);
Success #stdin #stdout 0.02s 52488KB
stdin
Standard input is empty
stdout
object(B)#3 (1) {
  ["data":"A":private]=>
  array(3) {
    [0]=>
    string(3) "one"
    [1]=>
    string(3) "two"
    [2]=>
    string(1) "x"
  }
}
object(B)#1 (1) {
  ["data":"A":private]=>
  array(3) {
    [0]=>
    string(3) "one"
    [1]=>
    string(3) "two"
    [2]=>
    string(1) "z"
  }
}