On Wed, Jul 24, 2024, at 16:28, Nicolas Grekas wrote:
>
> To Rob: proxying by interface can be implemented using regular code
> generation so it's not a blocker. Symfony does it already, and will continue
> to do it to cover the use case.
I'm not sure what you mean, as the RFC makes it look this should be completely
legal, until you get to the end:
interface Fancy {
function sayHi(): void;
}
class A implements Fancy {
function sayHi(): void { echo "hi!"; }
}
$container->register(proxyType: Fancy::class, factory: fn() => new A());
// Now container only knows that it needs to return a FancyClass and this is
"legal looking":
$lazy = new ReflectionClass($proxyType)->newLazyProxy($factory);
// same as
$lazy = new ReflectionClass(Fancy::class)->newLazyProxy(fn() => new A());
This ^ compiles, it's perfectly legal and makes 100% sense that I should be
able to call $lazy->sayHi() and it calls A::sayHi(), which is what you would
expect. Instead, this is runtime error.
— Rob