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