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

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

« previous php.internals (#70014) next »