array_access_002.phpt 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. --TEST--
  2. ZE2 ArrayAccess::offsetSet without return
  3. --FILE--
  4. <?php
  5. class ObjectOne implements ArrayAccess {
  6. public $a = array('1st', 1, 2=>'3rd', '4th'=>4);
  7. function offsetExists($index) {
  8. echo __METHOD__ . "($index)\n";
  9. return array_key_exists($index, $this->a);
  10. }
  11. function offsetGet($index) {
  12. echo __METHOD__ . "($index)\n";
  13. return $this->a[$index];
  14. }
  15. function offsetSet($index, $newval) {
  16. echo __METHOD__ . "($index,$newval)\n";
  17. /*return*/ $this->a[$index] = $newval;
  18. }
  19. function offsetUnset($index) {
  20. echo __METHOD__ . "($index)\n";
  21. unset($this->a[$index]);
  22. }
  23. }
  24. $obj = new ObjectOne;
  25. var_dump($obj->a);
  26. echo "===EMPTY===\n";
  27. var_dump(empty($obj[0]));
  28. var_dump(empty($obj[1]));
  29. var_dump(empty($obj[2]));
  30. var_dump(empty($obj['4th']));
  31. var_dump(empty($obj['5th']));
  32. var_dump(empty($obj[6]));
  33. echo "===isset===\n";
  34. var_dump(isset($obj[0]));
  35. var_dump(isset($obj[1]));
  36. var_dump(isset($obj[2]));
  37. var_dump(isset($obj['4th']));
  38. var_dump(isset($obj['5th']));
  39. var_dump(isset($obj[6]));
  40. echo "===offsetGet===\n";
  41. var_dump($obj[0]);
  42. var_dump($obj[1]);
  43. var_dump($obj[2]);
  44. var_dump($obj['4th']);
  45. var_dump($obj['5th']);
  46. var_dump($obj[6]);
  47. echo "===offsetSet===\n";
  48. echo "WRITE 1\n";
  49. $obj[1] = 'Changed 1';
  50. var_dump($obj[1]);
  51. echo "WRITE 2\n";
  52. $obj['4th'] = 'Changed 4th';
  53. var_dump($obj['4th']);
  54. echo "WRITE 3\n";
  55. $obj['5th'] = 'Added 5th';
  56. var_dump($obj['5th']);
  57. echo "WRITE 4\n";
  58. $obj[6] = 'Added 6';
  59. var_dump($obj[6]);
  60. var_dump($obj[0]);
  61. var_dump($obj[2]);
  62. $x = $obj[6] = 'changed 6';
  63. var_dump($obj[6]);
  64. var_dump($x);
  65. echo "===unset===\n";
  66. var_dump($obj->a);
  67. unset($obj[2]);
  68. unset($obj['4th']);
  69. unset($obj[7]);
  70. unset($obj['8th']);
  71. var_dump($obj->a);
  72. ?>
  73. ===DONE===
  74. --EXPECTF--
  75. array(4) {
  76. [0]=>
  77. string(3) "1st"
  78. [1]=>
  79. int(1)
  80. [2]=>
  81. string(3) "3rd"
  82. ["4th"]=>
  83. int(4)
  84. }
  85. ===EMPTY===
  86. ObjectOne::offsetExists(0)
  87. ObjectOne::offsetGet(0)
  88. bool(false)
  89. ObjectOne::offsetExists(1)
  90. ObjectOne::offsetGet(1)
  91. bool(false)
  92. ObjectOne::offsetExists(2)
  93. ObjectOne::offsetGet(2)
  94. bool(false)
  95. ObjectOne::offsetExists(4th)
  96. ObjectOne::offsetGet(4th)
  97. bool(false)
  98. ObjectOne::offsetExists(5th)
  99. bool(true)
  100. ObjectOne::offsetExists(6)
  101. bool(true)
  102. ===isset===
  103. ObjectOne::offsetExists(0)
  104. bool(true)
  105. ObjectOne::offsetExists(1)
  106. bool(true)
  107. ObjectOne::offsetExists(2)
  108. bool(true)
  109. ObjectOne::offsetExists(4th)
  110. bool(true)
  111. ObjectOne::offsetExists(5th)
  112. bool(false)
  113. ObjectOne::offsetExists(6)
  114. bool(false)
  115. ===offsetGet===
  116. ObjectOne::offsetGet(0)
  117. string(3) "1st"
  118. ObjectOne::offsetGet(1)
  119. int(1)
  120. ObjectOne::offsetGet(2)
  121. string(3) "3rd"
  122. ObjectOne::offsetGet(4th)
  123. int(4)
  124. ObjectOne::offsetGet(5th)
  125. Notice: Undefined index: 5th in %sarray_access_002.php on line %d
  126. NULL
  127. ObjectOne::offsetGet(6)
  128. Notice: Undefined offset: 6 in %sarray_access_002.php on line %d
  129. NULL
  130. ===offsetSet===
  131. WRITE 1
  132. ObjectOne::offsetSet(1,Changed 1)
  133. ObjectOne::offsetGet(1)
  134. string(9) "Changed 1"
  135. WRITE 2
  136. ObjectOne::offsetSet(4th,Changed 4th)
  137. ObjectOne::offsetGet(4th)
  138. string(11) "Changed 4th"
  139. WRITE 3
  140. ObjectOne::offsetSet(5th,Added 5th)
  141. ObjectOne::offsetGet(5th)
  142. string(9) "Added 5th"
  143. WRITE 4
  144. ObjectOne::offsetSet(6,Added 6)
  145. ObjectOne::offsetGet(6)
  146. string(7) "Added 6"
  147. ObjectOne::offsetGet(0)
  148. string(3) "1st"
  149. ObjectOne::offsetGet(2)
  150. string(3) "3rd"
  151. ObjectOne::offsetSet(6,changed 6)
  152. ObjectOne::offsetGet(6)
  153. string(9) "changed 6"
  154. string(9) "changed 6"
  155. ===unset===
  156. array(6) {
  157. [0]=>
  158. string(3) "1st"
  159. [1]=>
  160. string(9) "Changed 1"
  161. [2]=>
  162. string(3) "3rd"
  163. ["4th"]=>
  164. string(11) "Changed 4th"
  165. ["5th"]=>
  166. string(9) "Added 5th"
  167. [6]=>
  168. string(9) "changed 6"
  169. }
  170. ObjectOne::offsetUnset(2)
  171. ObjectOne::offsetUnset(4th)
  172. ObjectOne::offsetUnset(7)
  173. ObjectOne::offsetUnset(8th)
  174. array(4) {
  175. [0]=>
  176. string(3) "1st"
  177. [1]=>
  178. string(9) "Changed 1"
  179. ["5th"]=>
  180. string(9) "Added 5th"
  181. [6]=>
  182. string(9) "changed 6"
  183. }
  184. ===DONE===