Re: Opinion on function/method name overloading
| From: | Christoph Becker | Date: | Mon, 06 Jun 2016 10:32:49 +0000 |
| Subject: | Re: Opinion on function/method name overloading | ||
| References: | 1 2 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-93836@lists.php.net to get a copy of this message | ||
Derick Rethans wrote:
> On Mon, 6 Jun 2016, Dominic Grostate wrote:
>
>> As I understand it, using Java-like function overloading in PHP is
>> undesirable due to hindrance in readability.
>
> Besides it impacting, readability, it will also create a large impact on
> performance.
>
> Right now, functions (and methods) are looked up by their name only. In
> order to support function overloading, the argument's types also need to
> be taken into account. In C++, it works by mangling function names by
> adding markers for types, such as:
>
> _ZN4HPHP34c_MongoDBDriverCursor_ni_getServerEPNS_10ObjectDataE
>
> which means:
>
> HPHP::c_MongoDBDriverCursor_ni_getServer(HPHP::ObjectData*)
>
> But unlike in C++, this needs to be done at runtime, and every time a
> function is called because PHP is dynamically typed, and not statically.
>
> For example:
>
> myOverLoadedFunction(string $s, long $l, Weather $w)
>
> could be:
>
> myOverLoadedFunction_s_l_cWeather
>
> or something like that.
>
> Doing these conversions would mean (in the most simple way), that for
> each function call, a string needs to be manipulated to create the
> mangled function name to lookup for in a hash, where right now, they
> only have to be strtolower()'ed (because of case insensivity).
>
> And then you need to do something sensible when *no* types have been
> defined.
And we would run into similar issues as with the union types with regard
to weak typing.
--
Christoph M. Becker