passByReference_006.phpt 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. --TEST--
  2. Pass uninitialised objects and arrays by reference to test implicit initialisation.
  3. --FILE--
  4. <?php
  5. function refs(&$ref1, &$ref2, &$ref3, &$ref4, &$ref5) {
  6. $ref1 = "Ref1 changed";
  7. $ref2 = "Ref2 changed";
  8. $ref3 = "Ref3 changed";
  9. $ref4 = "Ref4 changed";
  10. $ref5 = "Ref5 changed";
  11. }
  12. class C {
  13. function __construct(&$ref1, &$ref2, &$ref3, &$ref4, &$ref5) {
  14. $ref1 = "Ref1 changed";
  15. $ref2 = "Ref2 changed";
  16. $ref3 = "Ref3 changed";
  17. $ref4 = "Ref4 changed";
  18. $ref5 = "Ref5 changed";
  19. }
  20. function refs(&$ref1, &$ref2, &$ref3, &$ref4, &$ref5) {
  21. $ref1 = "Ref1 changed";
  22. $ref2 = "Ref2 changed";
  23. $ref3 = "Ref3 changed";
  24. $ref4 = "Ref4 changed";
  25. $ref5 = "Ref5 changed";
  26. }
  27. }
  28. echo "\n ---- Pass uninitialised array & object by ref: function call ---\n";
  29. unset($u1, $u2, $u3, $u4, $u5);
  30. refs($u1[0], $u2[0][1], $u3->a, $u4->a->b, $u5->a->b->c);
  31. var_dump($u1, $u2, $u3, $u4, $u5);
  32. echo "\n ---- Pass uninitialised arrays & objects by ref: static method call ---\n";
  33. unset($u1, $u2, $u3, $u4, $u5);
  34. C::refs($u1[0], $u2[0][1], $u3->a, $u4->a->b, $u5->a->b->c);
  35. var_dump($u1, $u2, $u3, $u4, $u5);
  36. echo "\n\n---- Pass uninitialised arrays & objects by ref: constructor ---\n";
  37. unset($u1, $u2, $u3, $u4, $u5);
  38. $c = new C($u1[0], $u2[0][1], $u3->a, $u4->a->b, $u5->a->b->c);
  39. var_dump($u1, $u2, $u3, $u4, $u5);
  40. echo "\n ---- Pass uninitialised arrays & objects by ref: instance method call ---\n";
  41. unset($u1, $u2, $u3, $u4, $u5);
  42. $c->refs($u1[0], $u2[0][1], $u3->a, $u4->a->b, $u5->a->b->c);
  43. var_dump($u1, $u2, $u3, $u4, $u5);
  44. ?>
  45. --EXPECTF--
  46. ---- Pass uninitialised array & object by ref: function call ---
  47. array(1) {
  48. [0]=>
  49. string(12) "Ref1 changed"
  50. }
  51. array(1) {
  52. [0]=>
  53. array(1) {
  54. [1]=>
  55. string(12) "Ref2 changed"
  56. }
  57. }
  58. object(stdClass)#%d (1) {
  59. ["a"]=>
  60. string(12) "Ref3 changed"
  61. }
  62. object(stdClass)#%d (1) {
  63. ["a"]=>
  64. object(stdClass)#%d (1) {
  65. ["b"]=>
  66. string(12) "Ref4 changed"
  67. }
  68. }
  69. object(stdClass)#%d (1) {
  70. ["a"]=>
  71. object(stdClass)#%d (1) {
  72. ["b"]=>
  73. object(stdClass)#%d (1) {
  74. ["c"]=>
  75. string(12) "Ref5 changed"
  76. }
  77. }
  78. }
  79. ---- Pass uninitialised arrays & objects by ref: static method call ---
  80. Deprecated: Non-static method C::refs() should not be called statically in %s on line 39
  81. array(1) {
  82. [0]=>
  83. string(12) "Ref1 changed"
  84. }
  85. array(1) {
  86. [0]=>
  87. array(1) {
  88. [1]=>
  89. string(12) "Ref2 changed"
  90. }
  91. }
  92. object(stdClass)#%d (1) {
  93. ["a"]=>
  94. string(12) "Ref3 changed"
  95. }
  96. object(stdClass)#%d (1) {
  97. ["a"]=>
  98. object(stdClass)#%d (1) {
  99. ["b"]=>
  100. string(12) "Ref4 changed"
  101. }
  102. }
  103. object(stdClass)#%d (1) {
  104. ["a"]=>
  105. object(stdClass)#%d (1) {
  106. ["b"]=>
  107. object(stdClass)#%d (1) {
  108. ["c"]=>
  109. string(12) "Ref5 changed"
  110. }
  111. }
  112. }
  113. ---- Pass uninitialised arrays & objects by ref: constructor ---
  114. array(1) {
  115. [0]=>
  116. string(12) "Ref1 changed"
  117. }
  118. array(1) {
  119. [0]=>
  120. array(1) {
  121. [1]=>
  122. string(12) "Ref2 changed"
  123. }
  124. }
  125. object(stdClass)#%d (1) {
  126. ["a"]=>
  127. string(12) "Ref3 changed"
  128. }
  129. object(stdClass)#%d (1) {
  130. ["a"]=>
  131. object(stdClass)#%d (1) {
  132. ["b"]=>
  133. string(12) "Ref4 changed"
  134. }
  135. }
  136. object(stdClass)#%d (1) {
  137. ["a"]=>
  138. object(stdClass)#%d (1) {
  139. ["b"]=>
  140. object(stdClass)#%d (1) {
  141. ["c"]=>
  142. string(12) "Ref5 changed"
  143. }
  144. }
  145. }
  146. ---- Pass uninitialised arrays & objects by ref: instance method call ---
  147. array(1) {
  148. [0]=>
  149. string(12) "Ref1 changed"
  150. }
  151. array(1) {
  152. [0]=>
  153. array(1) {
  154. [1]=>
  155. string(12) "Ref2 changed"
  156. }
  157. }
  158. object(stdClass)#%d (1) {
  159. ["a"]=>
  160. string(12) "Ref3 changed"
  161. }
  162. object(stdClass)#%d (1) {
  163. ["a"]=>
  164. object(stdClass)#%d (1) {
  165. ["b"]=>
  166. string(12) "Ref4 changed"
  167. }
  168. }
  169. object(stdClass)#%d (1) {
  170. ["a"]=>
  171. object(stdClass)#%d (1) {
  172. ["b"]=>
  173. object(stdClass)#%d (1) {
  174. ["c"]=>
  175. string(12) "Ref5 changed"
  176. }
  177. }
  178. }