ID:               18926
 Updated by:       [EMAIL PROTECTED]
 Reported By:      [EMAIL PROTECTED]
-Status:           Open
+Status:           Bogus
 Bug Type:         Scripting Engine problem
 Operating System: Mac OS X 10.1.5 / Darwin 5.5
 PHP Version:      4CVS-2002-08-15
 New Comment:

Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php




Previous Comments:
------------------------------------------------------------------------

[2002-08-15 21:09:04] [EMAIL PROTECTED]

presuming ZE == ZE1.3.0, this is on a vanilla build from CVS
(just checked it out, ran buildconf, then configure w/o options):
<?php
class foo { function from_foo($p) { echo "i am from foo: $p\n"; } }
class bar extends foo {
    function test() {
        foo::from_foo('foo::from_foo');
        call_user_func(
            array('foo','from_foo')
            ,'call_user_func(array(foo,from_foo))'
        );
        parent::from_foo('parent::from_foo');
        call_user_func(
            array('parent','from_foo')
            ,'call_user_func(array(parent,from_foo))'
        );
    }
}
error_reporting(E_ALL);
bar::test();
?>
gives you:
# sapi/cli/php -v
PHP 4.3.0-dev (cli), Copyright (c) 1997-2002 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2002 Zend Technologies
# sapi/cli/php ctest.php
i am from foo: foo::from_foo
i am from foo: call_user_func(array(foo,from_foo))
i am from foo: parent::from_foo

Warning: call_user_func(): First argumented is expected to be a valid
callback, 'parent::from_foo' was given in ctest.php on line 14

------------------------------------------------------------------------

[2002-08-15 20:40:37] [EMAIL PROTECTED]

can you please give a ZE example?

------------------------------------------------------------------------

[2002-08-15 20:26:30] [EMAIL PROTECTED]

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] [EMAIL PROTECTED]

Is this with ZE2 or ZE1?

------------------------------------------------------------------------

[2002-08-15 17:10:04] [EMAIL PROTECTED]

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

Reply via email to