Hello internals,

I've written a small RFC to make it possible to call constructors of
objects as a callable, rather than only being able to call them
through the 'new' language construct.

https://wiki.php.net/rfc/callableconstructors

After gathering informal feedback for the RFC, one person said that
they felt it needed more of an emphasis on why it should be
implemented. I wanted to keep the actual RFC short, in the hope that
more people would read it in it's entirety, and also wanted to leave
library specific code out of the RFC. So, as an addendum to the RFC
text:

I use the Auryn* DIC library. What I've wanted to do, and should be
able to do in my opinion, is this:

$injector->delegate('FooInterface', 'FooImplementation::__construct');

Which tells the injector "Whenever something requests an object that
implements FooInterface as a dependency, just execute the
FooImplementation constructor to make that object".

If constructors had always been callable in PHP, this would be a
standard thing to do and not controversial imo. It's only due to
reasons lost in the mists of time, that object instantiation can only
be invoked via 'new' that it's not possible currently, and so needs an
RFC to change.

As for the 'BC break' - I would be interested in hearing if anyone
actually (admits to) having any code that would be affected by it.

I think possibly the best way to manage this BC break, would be to
make call_user_function($fn) behave the same as $fn(), when $fn =
'Foo::__construct' in a 7.0.x release, before adding the new
functionality in 7.1.0. That would allow people to upgrade to a
version where the changed behaviour breaks entirely, and so they can
fix their code to use the correct calling semantics, before adding the
new functionality in a later version. That give a clear way for people
to detect problems, rather than it being a subtle change which is hard
to detect. However I remain open to ideas on how to manage it better.

cheers
Dan


* https://github.com/rdlowrey/auryn

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to