|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #38992 ReflectionMethod::invoke() and ::invokeArgs() static method calls should match
Submitted: 2006-09-29 13:15 UTC Modified: 2010-12-20 14:17 UTC
Avg. Score:4.1 ± 0.9
Reproduced:7 of 7 (100.0%)
Same Version:2 (28.6%)
Same OS:1 (14.3%)
From: matthew at zend dot com Assigned: johannes
Status: Assigned Package: Reflection related
PHP Version: 5.1.6 OS: Debian SID on i686
Private report: No CVE-ID:
Have you experienced this issue?
Rate the importance of this bug to you:

 [2006-09-29 13:15 UTC] matthew at zend dot com
ReflectionMethod::invoke() and ReflectionMethod::invokeArgs() implementations currently do not support the same functionality.

Currently, ReflectionMethod::invoke() can be called using a string class name as the first argument *if* the method is declared static. However, ReflectionMethod::invokeArgs(), called the same way, raises a warning and does not invoke the method:

    Warning: ReflectionMethod::invokeArgs() expects parameter 1 to be object, string given

Calling with a string class name is undocumented currently, but a useful feature to have. I'd request that invokeArgs() be made to match the current invoke() functionality, and the documentation updated to indicate this usage.

Reproduce code:
class MyClass
    public static function doSomething()
        echo "Did it!\n";

$r = new ReflectionMethod('MyClass', 'doSomething');
$args = array();
$r->invoke('MyClass', array());
$r->invokeArgs('MyClass', $args);

Expected result:
Did it!
Did it!

Actual result:
Did it!

Warning: ReflectionMethod::invokeArgs() expects parameter 1 to be object, string given in ... line 13


Add a Patch

Pull Requests

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2007-05-28 19:37 UTC] andrea at 3site dot it
I suppose this isn't a bug since PHP 5 inherits classes public static methods too (and they call them ... feature ... ).

$r->invoke(new MyClass, array());

This should be expected bahaviour or there's something wrong on this "bogus":

If this bug will be solved, PHP developers should think about *difference* between public static methods and instances methods, that are two different things, expecially without overload possibility changing arguments or using __call too, that in this case, isn't "so magic", IMHO.
 [2010-12-20 14:17 UTC]
-Package: Feature/Change Request +Package: Reflection related
 [2011-05-11 22:53 UTC] kaplich at gmail dot com
If anybody needs invokeArgs functionality though the following code works fine:

class A
	public static function run()
		$class = new ReflectionClass('B');
		$method = $class->getMethod('foo');
		call_user_func_array(array($method, 'invoke'), array('B', 1, 2));

class B extends A
	public static function foo($v1, $v2)
		echo $v1." / ".$v2;


Expected result:
1 / 2

Actual result:
1 / 2
PHP Copyright © 2001-2016 The PHP Group
All rights reserved.
Last updated: Sat Jul 30 13:01:39 2016 UTC