diff options
-rw-r--r-- | Zend/zend_observer.c | 2 | ||||
-rw-r--r-- | ext/zend_test/tests/observer_closure_02.phpt | 32 |
2 files changed, 33 insertions, 1 deletions
diff --git a/Zend/zend_observer.c b/Zend/zend_observer.c index a60428ee04..2bb7f9afa2 100644 --- a/Zend/zend_observer.c +++ b/Zend/zend_observer.c @@ -29,7 +29,7 @@ #define ZEND_OBSERVER_NOT_OBSERVED ((void *) 2) #define ZEND_OBSERVABLE_FN(fn_flags) \ - (!(fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE | ZEND_ACC_FAKE_CLOSURE))) + (!(fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) typedef struct _zend_observer_fcall_data { // points after the last handler diff --git a/ext/zend_test/tests/observer_closure_02.phpt b/ext/zend_test/tests/observer_closure_02.phpt new file mode 100644 index 0000000000..9d6cc900e3 --- /dev/null +++ b/ext/zend_test/tests/observer_closure_02.phpt @@ -0,0 +1,32 @@ +--TEST-- +Observer: Observability of fake closures +--SKIPIF-- +<?php if (!extension_loaded('zend-test')) die('skip: zend_test extension required'); ?> +--INI-- +zend_test.observer.enabled=1 +zend_test.observer.observe_all=1 +--FILE-- +<?php +class Foo +{ + public function bar() + { + echo 'Called as fake closure.' . PHP_EOL; + } +} + +$callable = [new Foo(), 'bar']; +$closure = \Closure::fromCallable($callable); +$closure(); + +echo 'DONE' . PHP_EOL; +?> +--EXPECTF-- +<!-- init '%s%eobserver_closure_%d.php' --> +<file '%s%eobserver_closure_%d.php'> + <!-- init Foo::bar() --> + <Foo::bar> +Called as fake closure. + </Foo::bar> +DONE +</file '%s%eobserver_closure_%d.php'> |