xref: /php-src/Zend/tests/closure_005.phpt (revision 08b2ab22)
1--TEST--
2Closure 005: Lambda inside class, lifetime of $this
3--FILE--
4<?php
5
6class A {
7    private $x;
8
9    function __construct($x) {
10        $this->x = $x;
11    }
12
13    function __destruct() {
14        echo "Destroyed\n";
15    }
16
17    function getIncer($val) {
18        return function() use ($val) {
19            $this->x += $val;
20        };
21    }
22
23    function getPrinter() {
24        return function() {
25            echo $this->x."\n";
26        };
27    }
28
29    function getError() {
30        return static function() {
31            echo $this->x."\n";
32        };
33    }
34
35    function printX() {
36        echo $this->x."\n";
37    }
38}
39
40$a = new A(3);
41$incer = $a->getIncer(2);
42$printer = $a->getPrinter();
43$error = $a->getError();
44
45$a->printX();
46$printer();
47$incer();
48$a->printX();
49$printer();
50
51unset($a);
52
53$incer();
54$printer();
55
56unset($incer);
57$printer();
58
59unset($printer);
60
61$error();
62
63echo "Done\n";
64?>
65--EXPECTF--
663
673
685
695
707
717
72Destroyed
73
74Fatal error: Uncaught Error: Using $this when not in object context in %sclosure_005.php:28
75Stack trace:
76#0 %s(%d): A::{closure:%s:%d}()
77#1 {main}
78  thrown in %sclosure_005.php on line 28
79