diff options
Diffstat (limited to 'ext/spl/tests/array_access_002.phpt')
-rwxr-xr-x | ext/spl/tests/array_access_002.phpt | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/ext/spl/tests/array_access_002.phpt b/ext/spl/tests/array_access_002.phpt new file mode 100755 index 0000000000..d415b19248 --- /dev/null +++ b/ext/spl/tests/array_access_002.phpt @@ -0,0 +1,137 @@ +--TEST-- +SPL: array_access without return in set() +--SKIPIF-- +<?php + if (!extension_loaded("spl")) die("skip"); + if (!in_array("spl::array_access",spl_classes())) die("skip spl::array_access not present"); +?> +--FILE-- +<?php +class c implements spl::array_access { + + public $a = array('1st', 1, 2=>'3rd', '4th'=>4); + function exists($index) { + echo __METHOD__ . "($index)\n"; + return array_key_exists($index, $this->a); + } + function get($index) { + echo __METHOD__ . "($index)\n"; + return $this->a[$index]; + } + function set($index, $newval) { + echo __METHOD__ . "($index,$newval)\n"; + /* return */ $this->a[$index] = $newval; + } +} + +$obj = new c(); + +var_dump($obj->a); + +var_dump($obj[0]); +var_dump($obj[1]); +var_dump($obj[2]); +var_dump($obj['4th']); +var_dump($obj['5th']); +var_dump($obj[6]); + +echo "WRITE 1\n"; +$obj[1] = 'Changed 1'; +var_dump($obj[1]); +echo "WRITE 2\n"; +$obj['4th'] = 'Changed 4th'; +var_dump($obj['4th']); +echo "WRITE 3\n"; +$obj['5th'] = 'Added 5th'; +var_dump($obj['5th']); +echo "WRITE 4\n"; +$obj[6] = 'Added 6'; +var_dump($obj[6]); + +var_dump($obj[0]); +var_dump($obj[2]); + +$x = $obj[6] = 'changed 6'; +var_dump($obj[6]); +var_dump($x); + +print "Done\n"; +?> +--EXPECTF-- +array(4) { + [0]=> + string(3) "1st" + [1]=> + int(1) + [2]=> + string(3) "3rd" + ["4th"]=> + int(4) +} +c::exists(0) +c::get(0) +string(3) "1st" +c::exists(1) +c::get(1) +int(1) +c::exists(2) +c::get(2) +string(3) "3rd" +c::exists(4th) +c::get(4th) +int(4) +c::exists(5th) + +Notice: Undefined index: 5th in %s on line %d +NULL +c::exists(6) + +Notice: Undefined index: 6 in %s on line %d +NULL +WRITE 1 +c::exists(1) +c::set(1,Changed 1) + +Warning: Method c::set() did not return a value, using NULL in %s on line %d +c::exists(1) +c::get(1) +string(9) "Changed 1" +WRITE 2 +c::exists(4th) +c::set(4th,Changed 4th) + +Warning: Method c::set() did not return a value, using NULL in %s on line %d +c::exists(4th) +c::get(4th) +string(11) "Changed 4th" +WRITE 3 +c::exists(5th) +c::set(5th,Added 5th) + +Warning: Method c::set() did not return a value, using NULL in %s on line %d +c::exists(5th) +c::get(5th) +string(9) "Added 5th" +WRITE 4 +c::exists(6) +c::set(6,Added 6) + +Warning: Method c::set() did not return a value, using NULL in %s on line %d +c::exists(6) +c::get(6) +string(7) "Added 6" +c::exists(0) +c::get(0) +string(3) "1st" +c::exists(2) +c::get(2) +string(3) "3rd" +c::exists(6) +c::set(6,changed 6) + +Warning: Method c::set() did not return a value, using NULL in %s on line %d +c::exists(6) +c::get(6) +string(9) "changed 6" +NULL +Done |