mirror of
https://github.com/php/php-src.git
synced 2024-10-19 07:22:40 +00:00
116 lines
1.5 KiB
PHP
116 lines
1.5 KiB
PHP
--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"
|
|
}
|