Doc #54130 [Com]: call_user_func description is too general
| From: | hello at apfelbox dot net | Date: | Sat, 07 Jan 2012 23:27:37 +0000 |
| Subject: | Doc #54130 [Com]: call_user_func description is too general | ||
| References: | 1 | Groups: | php.doc.bugs |
| Request: | Send a blank email to doc-bugs+get-7748@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=54130&edit=1
ID: 54130
Comment by: hello at apfelbox dot net
Reported by: ajrattink at correct dot net
Summary: call_user_func description is too general
Status: No Feedback
Type: Documentation Problem
Package: Documentation problem
PHP Version: 5.3.5
Assigned To: frozenfire
Block user comment: N
Private report: N
New Comment:
Sorry, forgot to mention:
tested on OSX with PHP 5.3.6 (not the newest version, I know..)
Previous Comments:
------------------------------------------------------------------------
[2012-01-07 23:25:47] 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.
------------------------------------------------------------------------
[2011-12-05 23:00:39] 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).
------------------------------------------------------------------------
[2011-03-01 17:03:57] 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.
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=54130&edit=1