by_ref.phpt 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. --TEST--
  2. Argument unpacking with by-ref arguments
  3. --FILE--
  4. <?php
  5. error_reporting(E_ALL);
  6. function test1(&...$args) {
  7. foreach ($args as &$arg) {
  8. $arg++;
  9. }
  10. }
  11. test1(...[1, 2, 3]);
  12. $array = [1, 2, 3];
  13. test1(...$array);
  14. var_dump($array);
  15. $array1 = [1, 2]; $array2 = [3, 4];
  16. test1(...$array1, ...$array2);
  17. var_dump($array1, $array2);
  18. function test2($val1, &$ref1, $val2, &$ref2) {
  19. $ref1++;
  20. $ref2++;
  21. }
  22. $array = [0, 0, 0, 0];
  23. test2(...$array);
  24. var_dump($array);
  25. $array1 = [1, 2]; $array2 = [4, 5];
  26. test1(...$array1, ...$array2);
  27. var_dump($array1, $array2);
  28. $a = $b = $c = $d = 0;
  29. $array = [0, 0, 0, 0];
  30. test2($a, ...$array);
  31. var_dump($a, $array);
  32. test2($a, $b, ...$array);
  33. var_dump($a, $b, $array);
  34. test2($a, $b, $c, ...$array);
  35. var_dump($a, $b, $c, $array);
  36. test2($a, $b, $c, $d, ...$array);
  37. var_dump($a, $b, $c, $d, $array);
  38. ?>
  39. --EXPECT--
  40. array(3) {
  41. [0]=>
  42. int(2)
  43. [1]=>
  44. int(3)
  45. [2]=>
  46. int(4)
  47. }
  48. array(2) {
  49. [0]=>
  50. int(2)
  51. [1]=>
  52. int(3)
  53. }
  54. array(2) {
  55. [0]=>
  56. int(4)
  57. [1]=>
  58. int(5)
  59. }
  60. array(4) {
  61. [0]=>
  62. int(0)
  63. [1]=>
  64. int(1)
  65. [2]=>
  66. int(0)
  67. [3]=>
  68. int(1)
  69. }
  70. array(2) {
  71. [0]=>
  72. int(2)
  73. [1]=>
  74. int(3)
  75. }
  76. array(2) {
  77. [0]=>
  78. int(5)
  79. [1]=>
  80. int(6)
  81. }
  82. int(0)
  83. array(4) {
  84. [0]=>
  85. int(1)
  86. [1]=>
  87. int(0)
  88. [2]=>
  89. int(1)
  90. [3]=>
  91. int(0)
  92. }
  93. int(0)
  94. int(1)
  95. array(4) {
  96. [0]=>
  97. int(1)
  98. [1]=>
  99. int(1)
  100. [2]=>
  101. int(1)
  102. [3]=>
  103. int(0)
  104. }
  105. int(0)
  106. int(2)
  107. int(0)
  108. array(4) {
  109. [0]=>
  110. int(2)
  111. [1]=>
  112. int(1)
  113. [2]=>
  114. int(1)
  115. [3]=>
  116. int(0)
  117. }
  118. int(0)
  119. int(3)
  120. int(0)
  121. int(1)
  122. array(4) {
  123. [0]=>
  124. int(2)
  125. [1]=>
  126. int(1)
  127. [2]=>
  128. int(1)
  129. [3]=>
  130. int(0)
  131. }