Re: PHP RFC: Deffering functions by arguments (count or/and type)

From: Date: Tue, 05 Nov 2013 20:21:27 +0000
Subject: Re: PHP RFC: Deffering functions by arguments (count or/and type)
References: 1 2 3  Groups: php.internals 
Request: Send a blank email to internals+get-70019@lists.php.net to get a copy of this message
On Tue, 2013-11-05 at 19:22 +0100, Kevin Ingwersen wrote: > I had nothing to do, With such statements be careful: A mail here goes to a thousand or so readers, saving them time is notable and helps to get responses. > so here we go: > https://gist.github.com/IngwiePhoenix/e7fbee9f769fc137250d There are two things which have to be solved for this being possible: * There needs to be a backwards compatible way to handle the fact that PHP functions accept variable amounts of parameters currently * This has to be implemented in a way not slowing down all function calls For the first item think about code like this: class B { function foo() { func_get_ars(); } } class E extends B { function foo($bar = null) { func_get_ars(); } } $o = new E; $o->foo(1, 2); With the logic from the idea B::foo() and E::foo() are different methods, with current PHP they are overriding each other. Currently this call E::foo(). what should happen After your change? Break lots of code? For the second item: Function calls in PHP are relatively slow already and we have no good way to "bind" the calls during compilation so we always have to resolve the call at run time. Consider this: function foo(someInterface $o) { $o->method(); } There we don't know which method to call. Unless there is a good idea and a patch I expect this to slow down each and every function call. which in my perspective is a no-go. Languages like C++ "mangle" the parameters in the function name, which is complicated ina dynamic language lie PHP, and have more information (when compiling that sample function above PHP doesn't need the definition of someInterface, yet, it might not exist, yet) Maybe somebody has an idea for a good implementation. But till then I'd put this aside. johannes

« previous php.internals (#70019) next »