mirror of
https://github.com/php/php-src.git
synced 2025-01-24 12:43:38 +08:00
- New tests
This commit is contained in:
parent
0fa7fedfde
commit
a142b6cd86
12
Zend/tests/closure_017.phpt
Normal file
12
Zend/tests/closure_017.phpt
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
--TEST--
|
||||||
|
Closure 017: Trying to destroy an active lambda function
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
|
||||||
|
$a = function(&$a) { $a = 1; };
|
||||||
|
|
||||||
|
$a($a);
|
||||||
|
|
||||||
|
?>
|
||||||
|
--EXPECTF--
|
||||||
|
Fatal error: Cannot destroy active lambda function in %s on line %d
|
28
Zend/tests/closure_018.phpt
Normal file
28
Zend/tests/closure_018.phpt
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
--TEST--
|
||||||
|
Closure 018: Assigning lambda to static var and returning by ref
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
|
||||||
|
class foo {
|
||||||
|
public function test(&$x) {
|
||||||
|
static $lambda;
|
||||||
|
$lambda = function &() use (&$x) {
|
||||||
|
return $x = $x * $x;
|
||||||
|
};
|
||||||
|
return $lambda();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$test = new foo;
|
||||||
|
|
||||||
|
$y = 2;
|
||||||
|
var_dump($test->test($y));
|
||||||
|
var_dump($x = $test->test($y));
|
||||||
|
var_dump($y, $x);
|
||||||
|
|
||||||
|
?>
|
||||||
|
--EXPECT--
|
||||||
|
int(4)
|
||||||
|
int(16)
|
||||||
|
int(16)
|
||||||
|
int(16)
|
26
Zend/tests/closure_019.phpt
Normal file
26
Zend/tests/closure_019.phpt
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
--TEST--
|
||||||
|
Closure 019: Calling lambda using $GLOBALS and global $var
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
|
||||||
|
$lambda = function &(&$x) {
|
||||||
|
return $x = $x * $x;
|
||||||
|
};
|
||||||
|
|
||||||
|
function test() {
|
||||||
|
global $lambda;
|
||||||
|
|
||||||
|
$y = 3;
|
||||||
|
var_dump($GLOBALS['lambda']($y));
|
||||||
|
var_dump($lambda($y));
|
||||||
|
var_dump($GLOBALS['lambda'](1));
|
||||||
|
}
|
||||||
|
|
||||||
|
test();
|
||||||
|
|
||||||
|
?>
|
||||||
|
--EXPECTF--
|
||||||
|
int(9)
|
||||||
|
int(81)
|
||||||
|
|
||||||
|
Fatal error: Cannot pass parameter 1 by reference in %s on line %d
|
36
Zend/tests/closure_020.phpt
Normal file
36
Zend/tests/closure_020.phpt
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
--TEST--
|
||||||
|
Closure 020: Trying to access private property outside class
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
|
||||||
|
class foo {
|
||||||
|
private $test = 3;
|
||||||
|
|
||||||
|
public function x() {
|
||||||
|
$a = &$this;
|
||||||
|
$this->a = function() use (&$a) { return $a; };
|
||||||
|
var_dump($this->a->__invoke());
|
||||||
|
var_dump(is_a($this->a, 'closure'));
|
||||||
|
var_dump(is_callable($this->a));
|
||||||
|
|
||||||
|
return $this->a;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$foo = new foo;
|
||||||
|
$y = $foo->x();
|
||||||
|
var_dump($y()->test);
|
||||||
|
|
||||||
|
?>
|
||||||
|
--EXPECTF--
|
||||||
|
object(foo)#%d (%d) {
|
||||||
|
["test":"foo":private]=>
|
||||||
|
int(3)
|
||||||
|
["a"]=>
|
||||||
|
object(Closure)#%d (0) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
bool(true)
|
||||||
|
bool(true)
|
||||||
|
|
||||||
|
Fatal error: Cannot access private property foo::$test in %s on line %d
|
22
Zend/tests/closure_021.phpt
Normal file
22
Zend/tests/closure_021.phpt
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
--TEST--
|
||||||
|
Closure 021: Throwing exception inside lambda
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
|
||||||
|
$foo = function() {
|
||||||
|
try {
|
||||||
|
throw new Exception('test!');
|
||||||
|
} catch(Exception $e) {
|
||||||
|
throw $e;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
try {
|
||||||
|
$foo();
|
||||||
|
} catch (Exception $e) {
|
||||||
|
var_dump($e->getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
--EXPECT--
|
||||||
|
string(5) "test!"
|
Loading…
Reference in New Issue
Block a user