Req #69028 [Csd->Dup]: Allow variable default function parameters
| From: | nikic@php.net | Date: | Thu, 12 Feb 2015 11:22:45 +0000 |
| Subject: | Req #69028 [Csd->Dup]: Allow variable default function parameters | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-190619@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=69028&edit=1
ID: 69028
Updated by: nikic@php.net
Reported by: martin at glooware dot com
Summary: Allow variable default function parameters
-Status: Closed
+Status: Duplicate
Type: Feature/Change Request
-Package: PHP Language Specification
+Package: *General Issues
Operating System: all
PHP Version: 5.6.0
Assigned To: ajf
Block user comment: N
Private report: N
New Comment:
Sorry for the grumpy response ;) As Andrea already mentioned herself, this isn't yet
implemented in the way that was requested, so closing as duplicate of existing https://bugs.php.net/bug.php?id=60544 instead. In
there is a link to an SO thread with some more thoughts on the topic, might be of interest.
I don't think the request to support any expression is unreasonable per se - this would only
cause issues with Reflection, but doesn't have any semantic issues like allowing arbitrary
expressions for property initializers etc.
There's a number of relatively common non-constant parameter defaults, e.g. I've often
seen parameters declared as
Foo $param = null with a $param = $param ?: new
DefaultFoo line in the body (whether this is good code design is another question).
Previous Comments:
------------------------------------------------------------------------
[2015-02-12 08:39:56] martin at glooware dot com
Cool, my intention was definitely not to waste your time. I'm just not on 5.6 yet and I still
don't see how the variables part is irrelevant, as it's not implemented and still stands
as a feature request.
So now I wasted my time to request something that you just close the request for with an irritated
comment. Thought a little bit more of you guys, but looks like it's just like with PHP - when
you don't like something, you just throw an exception and send us to hell. Nice...
------------------------------------------------------------------------
[2015-02-11 18:32:40] ajf@php.net
For a more detailed answer:
>Currently it's not possible to use any constants, variables or anonymous functions in a
>function parameter as default value. This is for example not possible:
>function saveUser($name, $surname, $company = CONSTANT_COMPANY_VALUE) {}
Did you actually test that code sample and check the manual to make sure your assertion was
correctâ½
You have been able to use constants as default values since PHP 5.3, and that came out 6 years ago.
That function you provided? It already works.
Plus, since PHP 5.6, constant expressions are supported:
function foobar($x = "hello, " . [1, 2, 3][SOME_CONST] / 3 ** 7);
It's true that you can't use variables, but that can be easily done in the body of the
function.
------------------------------------------------------------------------
[2015-02-11 18:26:37] ajf@php.net
Thank you for your bug report. This issue has already been fixed
in the latest released version of PHP, which you can download at
http://www.php.net/downloads.php
Please do not waste our time by asking for features which have already been implemented.
http://wiki.php.net/rfc/const_scalar_exprs
------------------------------------------------------------------------
[2015-02-11 11:21:36] martin at glooware dot com
Description:
------------
Currently it's not possible to use any constants, variables or anonymous functions in a
function parameter as default value. This is for example not possible:
function saveUser($name, $surname, $company = CONSTANT_COMPANY_VALUE) {}
... or even this ...
function calculateGravitationalPull($rotation, $axis, $speed, $grav_const = (3.234 / $rotation *
$speed)) {}
I've come across various situations, like the example ones above, where I'd love to be
able to inject a configuration value or an anonymous function as a function parameter.
Coding this all inside the function is of course also possible. However, this would make it much
easier to create some specific functions for which we'd be able to say how the function behaves
straight from its own function and parameters documentation.
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=69028&edit=1