TypePHP 编译器
https://swoole.com/aot/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
1003 B
76 lines
1003 B
--TEST--
|
|
Closure 005: Lambda inside class, lifetime of $this
|
|
--FILE--
|
|
<?php
|
|
|
|
class A {
|
|
private $x;
|
|
|
|
function __construct($x) {
|
|
$this->x = $x;
|
|
}
|
|
|
|
function __destruct() {
|
|
echo "Destroyed\n";
|
|
}
|
|
|
|
function getIncer($val) {
|
|
return function() use ($val) {
|
|
$this->x += $val;
|
|
};
|
|
}
|
|
|
|
function getPrinter() {
|
|
return function() {
|
|
echo $this->x."\n";
|
|
};
|
|
}
|
|
|
|
function getError() {
|
|
return static function() {
|
|
echo $this->x."\n";
|
|
};
|
|
}
|
|
|
|
function printX() {
|
|
echo $this->x."\n";
|
|
}
|
|
}
|
|
|
|
function main() {
|
|
$a = new A(3);
|
|
$incer = $a->getIncer(2);
|
|
$printer = $a->getPrinter();
|
|
$error = $a->getError();
|
|
|
|
$a->printX();
|
|
$printer();
|
|
$incer();
|
|
$a->printX();
|
|
$printer();
|
|
|
|
unset($a);
|
|
|
|
$incer();
|
|
$printer();
|
|
|
|
unset($incer);
|
|
$printer();
|
|
|
|
unset($printer);
|
|
|
|
$error();
|
|
|
|
echo "Done\n";
|
|
}
|
|
?>
|
|
--EXPECTF--
|
|
3
|
|
3
|
|
5
|
|
5
|
|
7
|
|
7
|
|
7
|
|
Done
|
|
Destroyed
|