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

From: 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

« previous php.internals (#70018) next »