--- /dev/null
+--TEST--
+Calling non-static method with call_user_func()
+--FILE--
+<?php
+
+class foo {
+ public function teste() {
+ $this->a = 1;
+ }
+}
+
+call_user_func(array('foo', 'teste'));
+
+?>
+--EXPECTF--
+Strict Standards: call_user_func() expects parameter 1 to be a valid callback, non-static method foo::teste() should not be called statically in %s on line %d
+
+Fatal error: Using $this when not in object context in %s on line %d
--- /dev/null
+--TEST--
+Passing Closure as parameter to an non-existent function
+--FILE--
+<?php
+
+class foo {
+ public static function __callstatic($x, $y) {
+ var_dump($x,$y);
+ return 1;
+ }
+
+ public function teste() {
+ return foo::x(function &($a=1,$b) { });
+ }
+}
+
+var_dump(call_user_func(array('foo', 'teste')));
+
+?>
+--EXPECTF--
+Strict Standards: call_user_func() expects parameter 1 to be a valid callback, non-static method foo::teste() should not be called statically in %s on line %d
+%string|unicode%(1) "x"
+array(1) {
+ [0]=>
+ object(Closure)#%d (1) {
+ ["parameter"]=>
+ array(2) {
+ ["$a"]=>
+ string(10) "<required>"
+ ["$b"]=>
+ string(10) "<required>"
+ }
+ }
+}
+int(1)
--- /dev/null
+--TEST--
+Testing recursion detection with Closures
+--FILE--
+<?php
+
+$x = function () use (&$x) {
+ $h = function () use ($x) {
+ var_dump($x);
+ return 1;
+ };
+ return $h();
+};
+
+var_dump($x());
+
+?>
+--EXPECTF--
+object(Closure)#%d (1) {
+ ["static"]=>
+ array(1) {
+ [%u|b%"x"]=>
+ &object(Closure)#%d (1) {
+ ["static"]=>
+ array(1) {
+ [%u|b%"x"]=>
+ *RECURSION*
+ }
+ }
+ }
+}
+int(1)