#18926 [Opn->Fbk]: call_user_func_array does not mirror normal scope inside class functions
| From: | kalowsky@php.net | Date: | Fri, 16 Aug 2002 00:40:37 +0000 |
| Subject: | #18926 [Opn->Fbk]: call_user_func_array does not mirror normal scope inside class functions | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-16967@lists.php.net to get a copy of this message | ||
ID: 18926
Updated by: kalowsky@php.net
Reported By: tater@potatoe.com
-Status: Open
+Status: Feedback
Bug Type: Scripting Engine problem
Operating System: Mac OS X 10.1.5 / Darwin 5.5
PHP Version: 4CVS-2002-08-15
New Comment:
can you please give a ZE example?
Previous Comments:
------------------------------------------------------------------------
[2002-08-15 20:26:30] tater@potatoe.com
You see the same behavior with PHP 4.3.0-dev and ZE1.3 for 'parent'.
Calls to 'self' and the change in function name scope are ZE2 only
features anyway (I think).
------------------------------------------------------------------------
[2002-08-15 20:09:25] kalowsky@php.net
Is this with ZE2 or ZE1?
------------------------------------------------------------------------
[2002-08-15 17:10:04] tater@potatoe.com
Using call_user_func_array() inside a class function produces different
results from the equivalent direct function calls.
call_user_func_array(array('self,'method'), $args) gives an error,
although self::method() works, as does
call_user_func_array(array('myclassname','method'), $args).
(This format for calling static class methods is undocumented, by the
way - is it officially even supposed to work?)
Also, in PHP 4.3-dev, a call to myfunction() inside a class function
will check the current class's function table first, before calling a
globally defined function. But call_user_func_array('myfunction',$args)
does not - it only looks for global functions.
Whether any of these things are bugs or features, I don't know.
test script:
<?php
class foo
{
function myname() { return 'foo'; }
function myself()
{
$args = func_get_args();
echo '<li>', self::myname(), '::myself - my args are
',var_export($args,TRUE),"\n";
}
}
class bar extends foo
{
function myname() { return 'bar'; }
function test()
{
foo::myself('calling foo::myself');
bar::myself('calling bar::myself');
self::myself('calling self::myself');
parent::myself('calling parent::myself');
call_user_func_array(array('foo','myself'),
array('call_user_func_array on array("foo","myself")'));
call_user_func_array(array('bar','myself'),
array('call_user_func_array on array("bar","myself")'));
call_user_func_array(array('parent','myself'),
array('call_user_func_array on array("parent","myself")'));
call_user_func_array(array('self','myself'),
array('call_user_func_array on array("self","myself")'));
myself('calling myself');
call_user_func_array('myself', array('call_user_func_array on
"myself"'));
}
}
function myself()
{
echo '<li>i am the external function myself - my args are ',
var_export(func_get_args(), TRUE), "\n";
}
bar::test('testing',1,2);
?>
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=18926&edit=1