Почему бы не запустить функцию и не выяснить?
$b = new Bar;
echo $b->getFoo(5)->value;
$b->test();
echo $b->getFoo(5)->value;
Для меня приведенный выше код (вместе с вашим кодом) привел к выводу:
Foo #5
My value has now changed
Это не из-за «передачи по ссылке», а из-за «назначения по ссылке». В PHP 5 назначение по ссылке является поведением по умолчанию для объектов. Если вы хотите присвоить значение вместо этого, используйте ключевое слово clone .