Re: Named arguments revisited

From: Date: Thu, 01 Dec 2005 08:20:55 +0000
Subject: Re: Named arguments revisited
References: 1 2 3 4  Groups: php.internals 
Request: Send a blank email to internals+get-20935@lists.php.net to get a copy of this message
I have to admit, although you could do it other ways, it wouldn't be as clean as what you're proposing. Especially handy for when you just want to pass on that last parameter without having to pass on all the forgoing parameters. I'd consider it a nice-to-have. As for the syntax. I'd like to propose it as follows (syntax-wise): somefunction($var, $var2, $var3, $var4 = 'val4', $var5) {} Syntax for calling it with named arguments: somefunction($var3 = 'val3', $var5 = $othervar = 'val5'); Or it may be confusing to use '$' in front of the names. (I was looking for consistency with the way you define a function.) So perhaps like this: somefunction(var3 = 'val3', var5 = $othervar = 'val5'); Only now I'm wondering. Since the PHP engine would have to check for named arguments for each function. Wouldn't this performancewise cause too much overhead on function calls? Ron Korving wrote:
You could use an associative array, but then you have a not-so-clean syntax and you have to handle default values for missing parameters yourself. Named parameter example: <?php function adduser(username: $username, password: $password, superuser: $superuser=false) {
    // now do some stuff with $username, $password and $superuser
} adduser('root', 'abcdefg', true); // or: adduser(username: 'root', password: 'abcdefg', superuser: true); ?> Traditional named example: <?php function adduser($params) {
    if (!is_array($params)) throw new Exception('No named parameters');
    if (!isset($params['username'])) throw new Exception('Missing parameter: username');
    if (!isset($params['password'])) throw new Exception('Missing parameter: username');
    if (!isset($params['superuser'])) $params['superuser'] = false;
    // now do some stuff with $params
} adduser(array('username' => 'root', 'password' => 'abcdefg', 'superuser' => true)); ?> You see the big advantages of named parameters? - clean syntax - no array handling inside the function or method - no checking on the existance or non-existance of parameters - no forcing default values for missing parameters - when you need to skip a parameter, you no longer have to give it's default value when calling the function, you can simply skip the whole parameter: function foo(bar: $bar=0, bla: $bla='test', cow: $moo='moooo'); call: foo(cow: 'test'); foo(0, 'test', 'test'); Named parameters would kick serious butt :) - Ron "Bart de Boer" <bart@mediawave.nl> schreef in bericht news:2D.57.14828.3453E834@pb1.pair.com...
Hi Jared, If probably don't understand named arguments correclty but couldn't you do something like: function(array('name1' => 'val1', 'name2' => $var)); In the function you could then check which keys (names) have values, thereby simulating a form of named agruments?
On Nov 29, 2005, at 11:17 PM, Jared White wrote:
Named arguments are absolutely essential for using PHP as a solid templating language, and, in fact, they also greatly enhance code readability for complex method calls of in-depth APIs. My experience with both Objective-C and Python has showed me the wonders and joys of named arguments, and it is something I've desperately wanted in PHP for ages. I'm sure I'm not alone in this. I've tried array constructs, multiple arguments with string-based names and fancy parsing using func_get_args(), and various combinations thereof, and nothing is a good substitute for the real deal.


« previous php.internals (#20935) next »