php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Doc Bug #54130 call_user_func description is too general
Submitted: 2011-03-01 17:03 UTC Modified: 2012-01-07 18:24 UTC
From: ajrattink at correct dot net Assigned: frozenfire (profile)
Status: No Feedback Package: Documentation problem
PHP Version: 5.3.5 OS:
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: ajrattink at correct dot net
New email:
PHP Version: OS:

 

 [2011-03-01 17:03 UTC] ajrattink at correct dot net
Description:
------------
---
From manual page: http://www.php.net/function.call-user-func#Parameters
---

The manual states that call_user_func(array($classname, $methname), ...) 
will call the static method of the class indicated by +classname+ but fails to mention that it does not work if the class is imported in a namespace. 
To avoid disappointed programmers, I think it should.

Example:
  use X as Y;
  call_user_func(array('Y', 'f'), ...) 

will not work. This means that if the original class caused a nameconflict there is absolutely no way of calling it. Ever.


Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2011-12-05 23:00 UTC] frozenfire@php.net
-Status: Open +Status: Feedback -Assigned To: +Assigned To: frozenfire
 [2011-12-05 23:00 UTC] frozenfire@php.net
So, just to clarify what you're saying: It's not currently possible to use 
call_user_func with a callback pointing to a static method in an imported class?

If that's the case, this seems more like a Zend bug than anything 
(zend_call_function is what handles these calls).
 [2012-01-07 18:24 UTC] frozenfire@php.net
-Status: Feedback +Status: No Feedback
 [2012-01-07 23:25 UTC] hello at apfelbox dot net
Hi,

I can confirm that call_user_func does not seem to mind namespaces:

----

namespace A;

class X {
	public static function f ()
	{
		echo 'c';
	}
}

X::f();
call_user_func(array('X', 'f'));

-----

Expected:

cc

-----
Actual:

c
Warning: call_user_func() expects parameter 1 to be a valid callback, class 'X' not found in ....

-----


One comment to the last sentence of the original commenter:
there is a way: just use the fully qualified name, in my example

call_user_func(array('\A\X', 'f'));

will work as expected.
 [2012-01-07 23:27 UTC] hello at apfelbox dot net
Sorry, forgot to mention:
tested on OSX with PHP 5.3.6 (not the newest version, I know..)
 
PHP Copyright © 2001-2025 The PHP Group
All rights reserved.
Last updated: Wed Jul 02 05:01:42 2025 UTC