Edit report at https://bugs.php.net/bug.php?id=12712&edit=1

 ID:                 12712
 Updated by:         tac...@php.net
 Reported by:        martin at semester dot sk
 Summary:            named function parameters
-Status:             Open
+Status:             Wont fix
 Type:               Feature/Change Request
 Package:            Scripting Engine problem
 Operating System:   *
 PHP Version:        *
 Block user comment: N
 Private report:     N

 New Comment:

See #22216

he...@php.net said:
This has been discussed and declined several times. Check the mail archives for 
discussions.


Previous Comments:
------------------------------------------------------------------------
[2011-05-19 16:46:03] briank at kappacs dot com

I would like to suggest the following syntax:

function f ($un1, $un2, $un3 = 'default',
 'hello' => 'goodbye', 'planet' => 'earth') {
    # $_FUNCARGS is a magic local short-hand for func_get_args()
    var_dump($_FUNCARGS);
}

When called as:

f('one', 'named' => 'param', 'two', 5 => 'works', 'hello' => 'world', 'too');

... the equivalent of this would happen behind the scenes:

# (The order and position of the *named* parameters here are just
# an example and not necessarily what PHP might implement)
$_FUNCARGS = array(0 => 'one', 1 => 'two', 2 => 'default', 5 => 'works',
 6 => 'too', 'named' => 'param', 'hello' => 'world', 'planet' => 'earth');
$un1 = &$_FUNCARGS[0];
$un2 = &$_FUNCARGS[1];
$un3 = &$_FUNCARGS[2];

The bottom line is that the parameters look like an array(), with
both numeric and string keys, in any order, just like an array.

For readability, developers should probably put the unnamed parameters
before the named parameters just as a matter of style (for both function
calls and declarations), but the PHP engine should take them as they come.

------------------------------------------------------------------------
[2010-12-13 18:18:40] giecrilj at stegny dot 2a dot pl

There is no need to change the function declaration.  
Consider this syntax:
  printhello (bold => true, name => 'Martin');
and let the compiler translate it to 
  printhello ('Martin', true)
given the traditional declaration.

------------------------------------------------------------------------
[2008-08-27 08:37:51] coder at muctr dot edu dot ru

Would like to add the reason.
In medium to big projects (when many developers are involved) this feature 
could be of a great help. Because the code could be written in self-documenting 
manner.

E.g. compare
  $html = formatSomeData( $data, true, false, true, 10 );
to
  $html = formatSomeData( entity_x: $data, italic: true, bold: false, 
monospace: true, fontSize: 10 );

In the second case one doesn't have to search for formatSomeData() definition 
to start using it.

------------------------------------------------------------------------
[2001-08-13 04:05:59] martin at semester dot sk

Good day. It is not a really bug report but a little suggestion for new PHP 
relase. I'll be good thing to add to PHP
language ability to create functions with named parameters like in Visual 
Basic. For example:

//Classic function:
function printhello($name, $bold = false, $italic = false)
{
        $ret = "Hello $name!"
        if ($bold)
                $ret = "<strong>$ret</strong>";
        if ($italic)
                $ret = "<em>$ret</em>";
        echo $ret;
}

//Suggested function:
function printhello(name: $name, fat: $bold = false, emphased: $italic = false)
{
        // same body as above ...
}

This new function could be called like: printhello("Martin", true);
or like new: printhello(fat: true, name: "Martin");

Thank you.

------------------------------------------------------------------------



-- 
Edit this bug report at https://bugs.php.net/bug.php?id=12712&edit=1

Reply via email to