12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- --TEST--
- Unpacking named parameters
- --FILE--
- <?php
- function test($a, $b, $c) {
- echo "a = $a, b = $b, c = $c\n";
- }
- function test2($a = null, &$b = null) {
- $b++;
- }
- test(...['a' => 'a', 'b' => 'b', 'c' => 'c']);
- test(...['c' => 'c', 'b' => 'b', 'a' => 'a']);
- test(...['a', 'b' => 'b', 'c' => 'c']);
- try {
- test(...['a', 'b' => 'b', 'c']);
- } catch (Error $e) {
- echo $e->getMessage(), "\n";
- }
- try {
- test(...['a', 'a' => 'a']);
- } catch (Error $e) {
- echo $e->getMessage(), "\n";
- }
- $ary = ['b' => 0];
- $ary2 = $ary;
- test2(...$ary);
- var_dump($ary, $ary2);
- test(...new ArrayIterator(['a' => 'a', 'b' => 'b', 'c' => 'c']));
- test(...new ArrayIterator(['c' => 'c', 'b' => 'b', 'a' => 'a']));
- test(...new ArrayIterator(['a', 'b' => 'b', 'c' => 'c']));
- try {
- test(...new ArrayIterator(['a', 'b' => 'b', 'c']));
- } catch (Error $e) {
- echo $e->getMessage(), "\n";
- }
- try {
- test(...new ArrayIterator(['a', 'a' => 'a']));
- } catch (Error $e) {
- echo $e->getMessage(), "\n";
- }
- $ary = ['b' => 0];
- $ary2 = $ary;
- test2(...new ArrayIterator($ary));
- var_dump($ary, $ary2);
- ?>
- --EXPECTF--
- a = a, b = b, c = c
- a = a, b = b, c = c
- a = a, b = b, c = c
- Cannot use positional argument after named argument during unpacking
- Named parameter $a overwrites previous argument
- array(1) {
- ["b"]=>
- int(1)
- }
- array(1) {
- ["b"]=>
- int(0)
- }
- a = a, b = b, c = c
- a = a, b = b, c = c
- a = a, b = b, c = c
- Cannot use positional argument after named argument during unpacking
- Named parameter $a overwrites previous argument
- Warning: Cannot pass by-reference argument 2 of test2() by unpacking a Traversable, passing by-value instead in %s on line %d
- array(1) {
- ["b"]=>
- int(0)
- }
- array(1) {
- ["b"]=>
- int(0)
- }
|