Hi Robert, for named parameters, I would prefer this syntax over list():
function foo($foo, [a: string $a, b: int &$b, c: bool $c = true]) { ... work with $foo, $a, $b, $c } $b = 42; foo('foo', ['a' => 'bar', 'b' => $b]); function bar($foo, SomeClass {a: string $a, b: int &$b, c: bool $c = true}) { ... work with $foo, $a, $b, $c } $o = new SomeClass(); $o->a = 'bar'; $o->b = 42; bar('foo', $o); Regards Thomas Robert Stoll wrote on 20.01.2016 22:20: > Hi Andrea > > I am writing you in private since I think this is rather out of scope. > > -----Ursprüngliche Nachricht----- >> Von: Pierre Joye [mailto:pierre....@gmail.com] >> Gesendet: Montag, 18. Januar 2016 05:54 >> An: Andrea Faulds >> Cc: PHP internals >> Betreff: Re: [PHP-DEV] [RFC] Allow specifying keys in list() >> >> hi Andrea, >> >> I very much like this proposal. Good work as usual! >> >> The only part where I think we should not rely on list is the future scope. I >> can see the logic that leads to use list for named >> arguments. >> However I really think it is a very different topic and having to use list to >> define arguments, it sounds like a hack to solve >> another long due feature. > > I agree with Pierre on this one. Using list for named parameters seems like a > lot of overhead on the declaration side to me (writing the name of a parameter > twice). IMO it should not require additional effort than writing a > function/method today and it should be available for all functions/methods and > not only for ones with special named-paramater-syntax. I think you should > consider further (when thinking about using the new feature for named > parameters) > - how can you specify optional parameters? > - how can you specify byRef parameters? > - what happens if one does not provide all keys? Currently this: list($a, $b) > = > [1]; //only produces a Warning > - are there differences between strict mode and none strict mode? e.g., what > if the type of the key is different? > - would it be possible to use a type for the key as well (as for the value > indicated in your RFC)? > - would you allow nested destructuring for parameters? > - how would you reduce the overhead of creating an array which is then copied > and passed to the function? > > IMO destructuring parameters and named parameters are two different things > which could be combined. Something like this: > function foo(SomeClass $class, list("x" => $x, "y" => $y) $point = ["x"=>0, > "y"=>0], $flagA = true, $flagB = 1) { > } > foo($myClass, point: [1,2], flagB: 0); > foo($myClass, flagB: 2); > > yet, IMO it would hamper readability (probably in many cases) and it would be > better to do it inside the function. > I understand destructuring parameters just as syntactic sugar and I would > still > expect that PhpDocumenter would indicate that my function requires an array. > Otherwise the same feature would suddenly also be used to declare deep > structured data structures and at this point I am not so sure whether auto > conversion of keys play well together with strict mode. It would certainly be > interesting from a type safety point of view that one can define very complex > data structures and let PHP do the work for verification. Yet, it also opens a > door to very ugly code (well... which also exists without the feature) -- > sorry, drifting away from the topic. > > Some other points crossing my mind > - how well does the feature interact with typed arrays (if they should be > introduced at some point)? > - how well does it interact with structural types (if they should be > introduced > at some point)? > > And now some points to the RFC: > - I like the RFC in general > - I am not really a fan of the naming "list" in general but I think it is > appropriate to reuse the same syntax for this task. > - one thing I am missing in the RFC is error handling. What happens if a key > is > not found? And there are surely other questions. I think you should include a > section about error handling in the RFC. > - I guess mixing number keys with string keys is possible, right? > - are placeholders (something like list(_ , $a, _) = [1,2,3]) in your > pipeline > or do you think they make no sense in PHP? > - already an idea how it would interact with pattern matching? > > Cheers, > Robert > > > > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: http://www.php.net/unsub.php > -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php