Re: PHP RFC: Deffering functions by arguments (count or/and type)
| From: | Kevin Ingwersen | Date: | Tue, 05 Nov 2013 18:22:41 +0000 |
| Subject: | Re: PHP RFC: Deffering functions by arguments (count or/and type) | ||
| References: | 1 2 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-70018@lists.php.net to get a copy of this message | ||
I had nothing to do, so here we go: https://gist.github.com/IngwiePhoenix/e7fbee9f769fc137250d
Am 05.11.2013 um 19:09 schrieb Nikita Popov <nikita.ppv@gmail.com>:
> On Tue, Nov 5, 2013 at 2:03 PM, Oleg Poludnenko <oleg@poludnenko.info>wrote:
>
>> Hi,
>>
>> My idea is somehow related to this one: Syntax for variadic
>> functions<https://wiki.php.net/rfc/variadics>
>> It is not a competitive idea but a supplemental one.
>>
>> So, the main point is to write different implementations for the functions
>> with the same name, but with different of arguments count or/and type:
>>
>> class Config { /** * Returns property value * @param string $key *
>> @returnmixed */
>> public function prop($key) { return isset($this->prop[$key]) ? $this->prop[
>> $key] : null; } /** * Sets property value * @param string $key *
>> @parammixed $value *@returnConfig */
>> public function prop($key, $value) { $this->prop[$key] = $value; return
>> $this; } }
>>
>> Also it will be possible to change arguments during inheritance:
>>
>> class Figure { /** * Calculate perimeter of an arbitrary figure *
>> @paramarray $angles *@returnint */
>> public function calcPerimeter(array $angles) { return array_sum($angles); }
>> } class Square extends Figure { /** * Calculate perimeter of a square
>> *@paramint $angle *@returnint */
>> public function calcPerimeter($angle) { return 4 * $angle; } } class
>> Rectangle extends Figure { /** * Calculate perimeter of a rectangle *
>> @paramint $height *@paramint $width *@returnint */
>> public function calcPerimeter($height, $width) { return 2 * ($height +
>> $width); } }
>>
>> The advantages of the syntax are:
>>
>> - It's immediately clear what function implements.
>> - The function becomes cleaner, without a lot of if-else constructions.
>> - A great opportunity to change function arguments during inheritance.
>>
>>
>> Regards,
>> Oleg Poludnenko
>>
>
> Would you mind putting your code in a gist/pastebin (or re-sending the mail
> with proper formatting)? It's hard to understand what this is about when
> the code is all in one line :)
>
> Nikita