From: Nikita Popov Date: Tue, 5 Jul 2016 13:13:36 +0000 (+0200) Subject: Closure::fromCallable(): Use fake closures X-Git-Tag: php-7.1.0alpha3~13 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e395b62c51524427b225323f827efdc46eb0b9b0;p=php Closure::fromCallable(): Use fake closures --- diff --git a/Zend/tests/closures/closure_from_callable_rebinding.phpt b/Zend/tests/closures/closure_from_callable_rebinding.phpt new file mode 100644 index 0000000000..6fb5c6ffc1 --- /dev/null +++ b/Zend/tests/closures/closure_from_callable_rebinding.phpt @@ -0,0 +1,20 @@ +--TEST-- +Testing Closure::fromCallable() functionality: Rebinding +--FILE-- +call(new B); + +?> +--EXPECTF-- +Warning: Cannot bind method A::method() to object of class B in %s on line %d diff --git a/Zend/zend_closures.c b/Zend/zend_closures.c index 5c5e8a6cb5..6185c212a8 100644 --- a/Zend/zend_closures.c +++ b/Zend/zend_closures.c @@ -295,9 +295,9 @@ static int zend_create_closure_from_callable(zval *return_value, zval *callable, if (fcc.object) { ZVAL_OBJ(&instance, fcc.object); - zend_create_closure(return_value, mptr, mptr->common.scope, fcc.object->ce, &instance); + zend_create_fake_closure(return_value, mptr, mptr->common.scope, fcc.object->ce, &instance); } else { - zend_create_closure(return_value, mptr, mptr->common.scope, NULL, NULL); + zend_create_fake_closure(return_value, mptr, mptr->common.scope, NULL, NULL); } return SUCCESS;