Merge branch 'PHP-5.5'

* PHP-5.5:
  Use in preg_replace_callback() using variables by reference and test for bug #64979
  https://bugs.php.net/bug.php?id=64979
This commit is contained in:
Stanislav Malyshev 2013-08-18 15:19:27 -07:00
commit 42214b6474
3 changed files with 84 additions and 0 deletions

32
Zend/tests/bug64979.phpt Normal file
View File

@ -0,0 +1,32 @@
--TEST--
Bug #64578 (Closures with static variables can be generators)
--XFAIL--
Bug #64979 not fixed yet.
--FILE--
<?php
function new_closure_gen() {
return function() {
static $foo = 0;
yield ++$foo;
};
}
$closure1 = new_closure_gen();
$closure2 = new_closure_gen();
$gen1 = $closure1();
$gen2 = $closure1();
$gen3 = $closure2();
foreach (array($gen1, $gen2, $gen3) as $gen) {
foreach ($gen as $val) {
print "$val\n";
}
}
?>
--EXPECT--
int(1)
int(2)
int(1)

View File

@ -0,0 +1,26 @@
--TEST--
Closure 047: Use in preg_replace_callback() using variables by reference
--FILE--
<?php
function replace_variables($text, $params) {
preg_replace_callback( '/(\?)/', function($matches) use (&$params, &$text) {
$text = preg_replace( '/(\?)/', array_shift( $params ), $text, 1 );
}, $text );
return $text;
}
echo replace_variables('a=?', array('0')) . "\n";
echo replace_variables('a=?, b=?', array('0', '1')) . "\n";
echo replace_variables('a=?, b=?, c=?', array('0', '1', '2')) . "\n";
echo "Done\n";
?>
--EXPECT--
a=0
a=0, b=1
a=0, b=1, c=2
Done

View File

@ -0,0 +1,26 @@
--TEST--
Closure 048: Use in preg_replace_callback() using variables by reference
--FILE--
<?php
function replace_variables($text, $params) {
$c = function($matches) use (&$params, &$text) {
$text = preg_replace( '/(\?)/', array_shift( $params ), $text, 1 );
};
preg_replace_callback( '/(\?)/', $c, $text );
return $text;
}
echo replace_variables('a=?', array('0')) . "\n";
echo replace_variables('a=?, b=?', array('0', '1')) . "\n";
echo replace_variables('a=?, b=?, c=?', array('0', '1', '2')) . "\n";
echo "Done\n";
?>
--EXPECT--
a=0
a=0, b=1
a=0, b=1, c=2
Done