array_access_001.phpt 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. --TEST--
  2. ZE2 ArrayAccess
  3. --FILE--
  4. <?php
  5. class ObjectOne implements ArrayAccess {
  6. public $a = array('1st', 1, 2=>'3rd', '4th'=>4);
  7. function offsetExists($index): bool {
  8. echo __METHOD__ . "($index)\n";
  9. return array_key_exists($index, $this->a);
  10. }
  11. function offsetGet($index): mixed {
  12. echo __METHOD__ . "($index)\n";
  13. return $this->a[$index];
  14. }
  15. function offsetSet($index, $newval): void {
  16. echo __METHOD__ . "($index,$newval)\n";
  17. $this->a[$index] = $newval;
  18. }
  19. function offsetUnset($index): void {
  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. --EXPECTF--
  74. array(4) {
  75. [0]=>
  76. string(3) "1st"
  77. [1]=>
  78. int(1)
  79. [2]=>
  80. string(3) "3rd"
  81. ["4th"]=>
  82. int(4)
  83. }
  84. ===EMPTY===
  85. ObjectOne::offsetExists(0)
  86. ObjectOne::offsetGet(0)
  87. bool(false)
  88. ObjectOne::offsetExists(1)
  89. ObjectOne::offsetGet(1)
  90. bool(false)
  91. ObjectOne::offsetExists(2)
  92. ObjectOne::offsetGet(2)
  93. bool(false)
  94. ObjectOne::offsetExists(4th)
  95. ObjectOne::offsetGet(4th)
  96. bool(false)
  97. ObjectOne::offsetExists(5th)
  98. bool(true)
  99. ObjectOne::offsetExists(6)
  100. bool(true)
  101. ===isset===
  102. ObjectOne::offsetExists(0)
  103. bool(true)
  104. ObjectOne::offsetExists(1)
  105. bool(true)
  106. ObjectOne::offsetExists(2)
  107. bool(true)
  108. ObjectOne::offsetExists(4th)
  109. bool(true)
  110. ObjectOne::offsetExists(5th)
  111. bool(false)
  112. ObjectOne::offsetExists(6)
  113. bool(false)
  114. ===offsetGet===
  115. ObjectOne::offsetGet(0)
  116. string(3) "1st"
  117. ObjectOne::offsetGet(1)
  118. int(1)
  119. ObjectOne::offsetGet(2)
  120. string(3) "3rd"
  121. ObjectOne::offsetGet(4th)
  122. int(4)
  123. ObjectOne::offsetGet(5th)
  124. Warning: Undefined array key "5th" in %s on line %d
  125. NULL
  126. ObjectOne::offsetGet(6)
  127. Warning: Undefined array key 6 in %s on line %d
  128. NULL
  129. ===offsetSet===
  130. WRITE 1
  131. ObjectOne::offsetSet(1,Changed 1)
  132. ObjectOne::offsetGet(1)
  133. string(9) "Changed 1"
  134. WRITE 2
  135. ObjectOne::offsetSet(4th,Changed 4th)
  136. ObjectOne::offsetGet(4th)
  137. string(11) "Changed 4th"
  138. WRITE 3
  139. ObjectOne::offsetSet(5th,Added 5th)
  140. ObjectOne::offsetGet(5th)
  141. string(9) "Added 5th"
  142. WRITE 4
  143. ObjectOne::offsetSet(6,Added 6)
  144. ObjectOne::offsetGet(6)
  145. string(7) "Added 6"
  146. ObjectOne::offsetGet(0)
  147. string(3) "1st"
  148. ObjectOne::offsetGet(2)
  149. string(3) "3rd"
  150. ObjectOne::offsetSet(6,changed 6)
  151. ObjectOne::offsetGet(6)
  152. string(9) "changed 6"
  153. string(9) "changed 6"
  154. ===unset===
  155. array(6) {
  156. [0]=>
  157. string(3) "1st"
  158. [1]=>
  159. string(9) "Changed 1"
  160. [2]=>
  161. string(3) "3rd"
  162. ["4th"]=>
  163. string(11) "Changed 4th"
  164. ["5th"]=>
  165. string(9) "Added 5th"
  166. [6]=>
  167. string(9) "changed 6"
  168. }
  169. ObjectOne::offsetUnset(2)
  170. ObjectOne::offsetUnset(4th)
  171. ObjectOne::offsetUnset(7)
  172. ObjectOne::offsetUnset(8th)
  173. array(4) {
  174. [0]=>
  175. string(3) "1st"
  176. [1]=>
  177. string(9) "Changed 1"
  178. ["5th"]=>
  179. string(9) "Added 5th"
  180. [6]=>
  181. string(9) "changed 6"
  182. }