В PHP этой проблемы нет - объекты всегда передаются по идентификатору (handle), аналогично указателям в Go.
В Go value receiver (func (v Value) Method()) получает копию, pointer receiver (func (p *Value) Method()) - ссылку. Интерфейс, требующий pointer receiver, не может быть удовлетворен value.
В PHP все объекты ведут себя как Go pointer receivers - методы всегда работают с оригинальным объектом. Клонирование нужно делать явно через clone.