Think it's also important to keep the IDE factor in mind. By just defining a catch-all at the end of your function declarations you essentially cut short any effort that could be made to have IDE code insight support for this language enhancement.
On 4/13/10, Jordi Boggiano <j.boggi...@seld.be> wrote: > On 13.04.2010 01:30, Pierre Joye wrote: >> On Tue, Apr 13, 2010 at 1:28 AM, Stanislav Malyshev <s...@zend.com> wrote: >> >>> I think that's the idea in general, now how it looks like - be it 'opt1' >>> => >>> 'no-foo' or opt1: 'no-foo' - that's the decision we need to take. I >>> personally still don't have the favorite, but in every case we still have >>> the full params list, otherwise the whole story is kind of useless - we >>> can >>> pass arrays as arrays now. >> >> I'd to go with opt1: 'value', I really don't the idea of having to use >> quotes for the name of the argument. > > Same here, although quoted means that we could potentially use dynamic > values (pending approval from parser gurus). I don't care for it, but I > know people will ask.. > > As for the passing arrays, in some cases, I think if we introduce named > parameters we might as well take the occasion to implement the "rest" > operator. In actionscript3 you can do the following (written in php): > > function foo($a, $b, ... $stuff) { > print_r($stuff); > } > > foo(1, 2, foo: FOO, bar: BAR); > > // array('foo' => 'FOO', 'bar' => 'BAR') > > Now you only get "args that weren't defined but still passed" in this > magic array. In AS3 you don't have named params so it's a bit of a > func_get_args() + array_shift() equivalent, but here it would allow you > to pass arbitrary values as an array without having to use the whole > array syntax, which while we're at it would make the > array-shorthand-please camp happy too I believe. > > Another use for that operator, as I had requested a few years ago, would > be to allow extending/implementing a function with potentially more args > than the minimal interface requires, without hacking it with > func_get_args(), i.e. this: > > interface foo { > function bar($a); > } > > class fooimpl implements foo { > function bar($a, $b) { > } > > // Fatal error: Declaration of fooimpl::bar() must be compatible with > that of foo::bar() > > While using rest arg without/after a var name would allow extending the > arg signature: > > interface foo { > function bar($a ...); > } > > class fooimpl implements foo { > function bar($a, $b) { > } > > // Happily declared > > Cheers, > Jordi > > -- -- Tjerk -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php