What you describe is first class support for classes, nothing much to do with anonymous classes.
On Wed, 13 Feb 2019, 09:01 Rasmus Schultz <ras...@mindplay.dk wrote: > The fact that the anonymous class syntax defines a class *and* immediately > constructs an instance is quite annoying. > > For one, this is quite incompatible with DI containers' ability to resolve > constructor arguments. > > Lets say you DI container can register a named component by merely > referencing a class that uses constructor injection - so lets say this > works: > > class MyController { > public function __construct(MyService $service) { > // ... > } > } > > $container->register("my-controller", MyController::class); > > Now I want to register an anonymous class, for example as part of an > integration test-suite, which is common enough: > > $container->register("my-controller", new class { > public function __construct(MyService $service) { > // ... > } > }); > > This doesn't work, because you're expected to actually pass the constructor > arguments immediately - because you can only define an anonymous class > while immediately creating an instance. > > What I really want is just an anonymous class - not an instance, so: > > $container->register("my-controller", class { > public function __construct(MyService $service) { > // ... > } > }); > > The question is, what would a class expression without the new keyword > evaluate to? > > Since we normally reference classes with just a class-name, I guess I'd > expect a string, like you'd get from the ::class constant. > > Any hope for something like that? >