<?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()
{
    $args = func_get_args();
    $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;