PHP RFC: Deffering functions by arguments (count or/and type)
| From: | Oleg Poludnenko | Date: | Tue, 05 Nov 2013 13:03:37 +0000 |
| Subject: | PHP RFC: Deffering functions by arguments (count or/and type) | ||
| Groups: | php.internals | ||
| Request: | Send a blank email to internals+get-70014@lists.php.net to get a copy of this message | ||
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