php-src/Zend/tests/closure_027.phpt
Dmitry Stogov ff363e2e7c Implemented RFC: Replace "Missing argument" warning with "Too few arguments" exception
Squashed commit of the following:

commit 8b45fa2acb
Author: Dmitry Stogov <dmitry@zend.com>
Date:   Thu Jun 16 01:52:50 2016 +0300

    Separate slow path of ZEND_RECV into a cold function.

commit 9e18895ee5
Author: Dmitry Stogov <dmitry@zend.com>
Date:   Wed Jun 15 23:26:28 2016 +0300

    Required argument can't be IS_UNDEF anymore.

commit 662db66e39
Author: Dmitry Stogov <dmitry@zend.com>
Date:   Tue May 31 17:14:50 2016 +0300

    Replace "Missing argument" warning by "Too few arguments" exception.
2016-06-16 02:32:02 +03:00

38 lines
773 B
PHP

--TEST--
Closure 027: Testing Closure type-hint
--FILE--
<?php
function test(closure $a) {
var_dump($a());
}
test(function() { return new stdclass; });
test(function() { });
$a = function($x) use ($y) {};
try {
test($a);
} catch (Throwable $e) {
echo "Exception: " . $e->getMessage() . "\n";
}
test(new stdclass);
?>
--EXPECTF--
object(stdClass)#%d (0) {
}
NULL
Notice: Undefined variable: y in %s on line %d
Exception: Too few arguments to function {closure}(), 0 passed in %s on line %d and exactly 1 expected
Fatal error: Uncaught TypeError: Argument 1 passed to test() must be an instance of Closure, instance of stdClass given, called in %s on line %d and defined in %s:%d
Stack trace:
#0 %s(%d): test(Object(stdClass))
#1 {main}
thrown in %s on line %d