On 25/02/2016 17:40, Andrea Faulds wrote:
Dan Ackroyd wrote:
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
While I like the concept, I dislike the execution.
Snipped for brevity, but I agree with your sentiment here. Making
__construct more magic seems like an imperfect solution to this. I'm not
sure making a new magic method (new, __new, etc) is much better though,
since it would serve such a limited purpose.
It has come up before in various contexts that PHP lacks a true callable
type, in the sense that you never "construct" a callable, you just *use*
something as a callable. I think callable constructors would fit better
as part of an API that solved this.
For instance, there could be a (magic) Callable class with various named
constructors:
- Callable::forFunction(string $function_name)
- Callable::forMethod(object $instance, string $method_name)
- Callable::forStaticMethod(string $class_name, string $method_name)
- Callable::fromPaamayimNekudotayim(string $class_colon_colon_method) //
OK, maybe not ;)
This isn't perfect, because the parameters would still look like strings
to static analysis, rather than being proper compiled-in references, but
it's nicer than repeatedly analysing an array or string to evaluate
is_callable() or type-checks.
Then we could add to that a special case for constructors:
- Callable::forConstructor(string $class_name)
This would be roughly equivalent to (and polyfillable with):
return function (...$args) use ( $class_name ) { return new
$class_name(...$args); };
Regards,
--
Rowan Collins
[IMSoP]
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php