--- /dev/null
+--TEST--
+Testing call_user_func inside namespace
+--FILE--
+<?php
+
+namespace testing {
+ function foobar($str) {
+ var_dump($str);
+ }
+
+ abstract class bar {
+ protected function prot($str) {
+ print "Shouldn't be called!\n";
+ }
+ }
+ class foo extends bar {
+ private function priv($str) {
+ print "Shouldn't be called!\n";
+ }
+ }
+
+ call_user_func(__NAMESPACE__ .'\foobar', 'foobar');
+
+ $class = __NAMESPACE__ .'\foo';
+ call_user_func(array(new $class, 'priv'), 'foobar');
+ call_user_func(array(new $class, 'prot'), 'foobar');
+}
+
+?>
+--EXPECTF--
+%string|unicode%(6) "foobar"
+
+Warning: call_user_func() expects parameter 1 to be a valid callback, cannot access private method testing\foo::priv() in %s on line %d
+
+Warning: call_user_func() expects parameter 1 to be a valid callback, cannot access protected method testing\foo::prot() in %s on line %d
--- /dev/null
+--TEST--
+Testing call_user_func() with autoload and passing invalid params
+--FILE--
+<?php
+
+function __autoload($class) {
+ var_dump($class);
+}
+
+call_user_func(array('foo', 'bar'));
+call_user_func(array('', 'bar'));
+call_user_func(array($foo, 'bar'));
+call_user_func(array($foo, ''));
+
+?>
+--EXPECTF--
+%unicode|string%(3) "foo"
+
+Warning: call_user_func() expects parameter 1 to be a valid callback, class 'foo' not found in %s on line %d
+
+Warning: call_user_func() expects parameter 1 to be a valid callback, class '' not found in %s on line %d
+
+Notice: Undefined variable: foo in %s on line %d
+
+Warning: call_user_func() expects parameter 1 to be a valid callback, first array member is not a valid class name or object in %s on line %d
+
+Notice: Undefined variable: foo in %s on line %d
+
+Warning: call_user_func() expects parameter 1 to be a valid callback, first array member is not a valid class name or object in %s on line %d
--- /dev/null
+--TEST--
+Testing call_user_func() with closures
+--FILE--
+<?php
+
+$foo = function() {
+ static $instance;
+
+ if (is_null($instance)) {
+ $instance = function () {
+ return 'OK!';
+ };
+ }
+
+ return $instance;
+};
+
+var_dump(call_user_func(array($foo, '__invoke'))->__invoke());
+var_dump(call_user_func(function() use (&$foo) { return $foo; }, '__invoke'));
+
+?>
+--EXPECTF--
+%unicode|string%(3) "OK!"
+object(Closure)#%d (1) {
+ [%u|b%"static"]=>
+ array(1) {
+ [%u|b%"instance"]=>
+ object(Closure)#%d (0) {
+ }
+ }
+}