1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
--TEST--
Lazy objects: GC 002
--FILE--
<?php
class Canary {
public $value;
public function __destruct() {
var_dump(__FUNCTION__);
}
}
class C {
}
function ghost() {
printf("# Ghost:\n");
$canary = new Canary();
$obj = (new ReflectionClass(C::class))->newInstanceWithoutConstructor();
(new ReflectionClass($obj))->resetAsLazyGhost($obj, function () use ($canary) {
});
$canary->value = $obj;
$canary = null;
$obj = null;
gc_collect_cycles();
}
function proxy() {
printf("# Proxy:\n");
$canary = new Canary();
$obj = (new ReflectionClass(C::class))->newInstanceWithoutConstructor();
(new ReflectionClass($obj))->resetAsLazyProxy($obj, function () use ($canary) {
return new C();
});
$canary->value = $obj;
$canary = null;
$obj = null;
gc_collect_cycles();
}
ghost();
proxy();
?>
==DONE==
--EXPECT--
# Ghost:
string(10) "__destruct"
# Proxy:
string(10) "__destruct"
==DONE==
|