Edit report at http://bugs.php.net/bug.php?id=12712&edit=1
ID: 12712 Comment by: briank at kappacs dot com Reported by: martin at semester dot sk Summary: named function parameters Status: Open Type: Feature/Change Request Package: Scripting Engine problem Operating System: * PHP Version: * Block user comment: N Private report: N New Comment: 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. Previous Comments: ------------------------------------------------------------------------ [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 http://bugs.php.net/bug.php?id=12712&edit=1