Req #69028 [Dup]: Allow variable default function parameters
| From: | pollita@php.net | Date: | Fri, 13 Feb 2015 17:54:00 +0000 |
| Subject: | Req #69028 [Dup]: Allow variable default function parameters | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-190670@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: pollita@php.net
Reported by: martin at glooware dot com
Summary: Allow variable default function parameters
Status: Duplicate
Type: Feature/Change Request
Package: *General Issues
Operating System: all
PHP Version: 5.6.0
Assigned To: ajf
Block user comment: N
Private report: N
New Comment:
Not for nothin', but HHVM supports any arbitrary expression in the default, even function
calls.
function foo($bar, $baz = getBaz($bar)) { ... }
Previous Comments:
------------------------------------------------------------------------
[2015-02-12 11:32:40] martin at martinambrus dot com
Thanks for the clarification and pointing me to a right direction. I too apologise for a little
over-reacting with my last comment, I was only genuinely surprised when I saw the first reply.
Also, sorry about the constant thing, I've probably not tried that for 6 years. And now that
the variable thing re-appeared in my mind, I guess I just wanted to prove a point with a wrong
example.
Best of luck, guys :)
------------------------------------------------------------------------
[2015-02-12 11:25:45] ajf@php.net
Oh yeah, I apologise for being rather hostile before... It is a valid request, I was just surprised
to see the first sample given we've supported it for a very, very long time.
------------------------------------------------------------------------
[2015-02-12 11:22:45] nikic@php.net
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).
------------------------------------------------------------------------
[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.
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=69028
--
Edit this bug report at https://bugs.php.net/bug.php?id=69028&edit=1