Edit report at http://bugs.php.net/bug.php?id=38992&edit=1
ID: 38992 Comment by: kaplich at gmail dot com Reported by: matthew at zend dot com Summary: ReflectionMethod::invoke() and ::invokeArgs() static method calls should match Status: Assigned Type: Feature/Change Request Package: Reflection related Operating System: Debian SID on i686 PHP Version: 5.1.6 Assigned To: johannes Block user comment: N Private report: N New Comment: 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; } } B::run(); Expected result: ---------------- 1 / 2 Actual result: -------------- 1 / 2 Previous Comments: ------------------------------------------------------------------------ [2007-05-28 19:37:22] 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": http://bugs.php.net/bug.php?id=40886 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. ------------------------------------------------------------------------ [2006-09-29 13:15:51] matthew at zend dot com Description: ------------ 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: --------------- <?php 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 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/bug.php?id=38992&edit=1