1
0
mirror of https://github.com/php/php-src.git synced 2026-03-25 16:52:18 +01:00
Files
archived-php-src/ext/standard/tests/array/bug39576.phpt
Nikita Popov dadb92ea35 Don't allow separation in array functions
The only case here that might be *somewhat* sensible is the userdata
argument of array_walk(), which could be used to keep persistent state
between callback invokations -- with the WTF moment that the final
result after the walk finishes will be unchanged. Nowdays, this is
much better achieved using a closure with a use-by-reference.
2020-07-07 09:15:43 +02:00

61 lines
1.2 KiB
PHP

--TEST--
Bug #39576 (array_walk() doesn't separate userdata zval)
--FILE--
<?php
class Test {
public $_table = '';
public $_columns = array ();
public $_primary = array ();
}
$test = new Test ();
$test->name = 'test';
$test->_columns['name'] = new stdClass;
function test ($value, $column, &$columns) {}
array_walk (
get_object_vars ($test),
'test',
$test->_columns
);
var_dump($test);
array_intersect_key (
get_object_vars ($test),
$test->_primary
);
echo "Done\n";
?>
--EXPECTF--
Notice: Only variables should be passed by reference in %s on line %d
Warning: test(): Argument #3 ($columns) must be passed by reference, value given in %s on line %d
Warning: test(): Argument #3 ($columns) must be passed by reference, value given in %s on line %d
Warning: test(): Argument #3 ($columns) must be passed by reference, value given in %s on line %d
Warning: test(): Argument #3 ($columns) must be passed by reference, value given in %s on line %d
object(Test)#%d (4) {
["_table"]=>
string(0) ""
["_columns"]=>
array(1) {
["name"]=>
object(stdClass)#%d (0) {
}
}
["_primary"]=>
array(0) {
}
["name"]=>
string(4) "test"
}
Done