Hi

On 6/30/24 15:08, Tim Düsterhus wrote:
I've read the updated RFC and it's still not clear to me that returning
an arbitrary “actual instance” object is sound. Especially when private
properties - which for all intents and purposes are not visible outside
of the class - are involved. Consider the following:

I initially wanted to include any new questions in a completely separate thread to keep stuff organized, but I realized that the cloning behavior is very closely related to what I already remarked above:

The cloning behavior appears to be unsound to me. Consider the following:

    class A {
       public function __construct(
         public string $property,
       ) {}
    }
    class B extends A {
       public function foo() { }
    }

    function only_b(B $b) { $b->foo(); }

    $r = new ReflectionClass(B::class);
    $b = $r->newLazyProxy(function ($obj) {
      return new A('value');
    });

    $b->property = 'init_please';

    $notActuallyB = clone $b;
    only_b($b); // legal
    only_b($notActuallyB); // illegal

I'm cloning what I believe to be an instance of B, but get back an A.

Best regards
Tim Düsterhus

Reply via email to