123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- --TEST--
- Bug #29493 (extract(EXTR_REFS) fails if array has multiple referrals)
- --FILE--
- <?php
- function t1()
- {
- $a = array('foo' => 'aaa');
- // refcount($a) = 1
- // refcount($a['foo']) = 1
- $b = $a;
- // refcount($a) = 2
- // refcount($a['foo']) = 1
- $b['foo'] = 'bbb';
- // refcount($a) = 1
- // refcount($a['foo']) = 1
- var_dump($a, $b);
- extract($a, EXTR_REFS);
- $foo = 'noo';
- var_dump($a, $b);
- }
- function t2()
- {
- $a = array('foo' => 'aaa');
- // refcount($a) = 1
- // refcount($a['foo']) = 1
- $b = &$a;
- // refcount($a) = 2
- // is_ref($a) = true
- // refcount($a['foo']) = 1
- $b['foo'] = 'bbb';
- // refcount($a) = 2
- // refcount($a['foo']) = 1
- var_dump($a, $b);
- extract($a, EXTR_REFS);
- $foo = 'noo';
- var_dump($a, $b);
- }
- function t3()
- {
- $a = array('foo' => 'aaa');
- // refcount($a) = 1
- // refcount($a['foo']) = 1
- $b = &$a;
- // refcount($a) = 2
- // is_ref($a) = true
- // refcount($a['foo']) = 1
- unset($b);
- // refcount($a) = 1
- // is_ref($a) = true
- // refcount($a['foo']) = 1
- var_dump($a);
- extract($a, EXTR_REFS);
- $foo = 'noo';
- var_dump($a);
- }
- t1();
- t2();
- t3();
- ?>
- --EXPECT--
- array(1) {
- ["foo"]=>
- string(3) "aaa"
- }
- array(1) {
- ["foo"]=>
- string(3) "bbb"
- }
- array(1) {
- ["foo"]=>
- &string(3) "noo"
- }
- array(1) {
- ["foo"]=>
- string(3) "bbb"
- }
- array(1) {
- ["foo"]=>
- string(3) "bbb"
- }
- array(1) {
- ["foo"]=>
- string(3) "bbb"
- }
- array(1) {
- ["foo"]=>
- &string(3) "noo"
- }
- array(1) {
- ["foo"]=>
- &string(3) "noo"
- }
- array(1) {
- ["foo"]=>
- string(3) "aaa"
- }
- array(1) {
- ["foo"]=>
- &string(3) "noo"
- }
|