<?php
// Still works
function invokeWithReference1(StdClass $class)
{
// Create args array using reference
$args = [$class];
$obj = new ReflectionClass('xyz');
return $obj->newInstanceArgs($args);
}
// Also still works
function invokeWithReference2()
{
$obj = new ReflectionClass('xyz');
return $obj->newInstanceArgs($args);
}
class xyz
{
public $class;
public function __construct(StdClass $class)
{
$this->class = $class;
}
public function setTest2()
{
$this->class->test2 = 'goodbye';
}
public function setTest3()
{
$this->class->test3 = 'yep';
}
}
$class = new StdClass;
$instance1 = invokeWithReference1($class);
$instance2 = invokeWithReference2($class);
$class->test = 'hello';
$instance1->setTest2();
$instance2->setTest3();
echo $instance1->class->test;
echo PHP_EOL;
echo $instance2->class->test;
echo PHP_EOL;
echo $class->test2;
echo PHP_EOL;
echo $class->test3;
PD9waHAKCi8vIFN0aWxsIHdvcmtzCmZ1bmN0aW9uIGludm9rZVdpdGhSZWZlcmVuY2UxKFN0ZENsYXNzICRjbGFzcykKewogICAgLy8gQ3JlYXRlIGFyZ3MgYXJyYXkgdXNpbmcgcmVmZXJlbmNlCiAgICAkYXJncyA9IFskY2xhc3NdOwogICAgJG9iaiA9IG5ldyBSZWZsZWN0aW9uQ2xhc3MoJ3h5eicpOwogICAgcmV0dXJuICRvYmotPm5ld0luc3RhbmNlQXJncygkYXJncyk7Cn0KCi8vIEFsc28gc3RpbGwgd29ya3MKZnVuY3Rpb24gaW52b2tlV2l0aFJlZmVyZW5jZTIoKQp7CiAgICAkYXJncyA9IGZ1bmNfZ2V0X2FyZ3MoKTsKICAgICRvYmogPSBuZXcgUmVmbGVjdGlvbkNsYXNzKCd4eXonKTsKICAgIHJldHVybiAkb2JqLT5uZXdJbnN0YW5jZUFyZ3MoJGFyZ3MpOwp9CgpjbGFzcyB4eXoKewogICAgcHVibGljICRjbGFzczsKICAgIAogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KFN0ZENsYXNzICRjbGFzcykKICAgIHsKICAgICAgICAkdGhpcy0+Y2xhc3MgPSAkY2xhc3M7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldFRlc3QyKCkKICAgIHsKICAgICAgICAkdGhpcy0+Y2xhc3MtPnRlc3QyID0gJ2dvb2RieWUnOwogICAgfQogICAgCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VGVzdDMoKQogICAgewogICAgICAgICR0aGlzLT5jbGFzcy0+dGVzdDMgPSAneWVwJzsKICAgIH0KfQoKJGNsYXNzID0gbmV3IFN0ZENsYXNzOwokaW5zdGFuY2UxID0gaW52b2tlV2l0aFJlZmVyZW5jZTEoJGNsYXNzKTsKJGluc3RhbmNlMiA9IGludm9rZVdpdGhSZWZlcmVuY2UyKCRjbGFzcyk7CgokY2xhc3MtPnRlc3QgPSAnaGVsbG8nOwokaW5zdGFuY2UxLT5zZXRUZXN0MigpOwokaW5zdGFuY2UyLT5zZXRUZXN0MygpOwoKZWNobyAkaW5zdGFuY2UxLT5jbGFzcy0+dGVzdDsKZWNobyBQSFBfRU9MOwplY2hvICRpbnN0YW5jZTItPmNsYXNzLT50ZXN0OwplY2hvIFBIUF9FT0w7CmVjaG8gJGNsYXNzLT50ZXN0MjsKZWNobyBQSFBfRU9MOwplY2hvICRjbGFzcy0+dGVzdDM7