ID:               24286
 Updated by:       [EMAIL PROTECTED]
 Reported By:      terjeto at stud dot ntnu dot no
-Status:           Verified
+Status:           Bogus
 Bug Type:         Zend Engine 2 problem
 Operating System: RedHat 9.0
 PHP Version:      5CVS-2003-06-22 (dev)
 New Comment:

Please do not submit the same bug more than once. An existing
bug report already describes this very problem. Even if you feel
that your issue is somewhat different, the resolution is likely
to be the same. 

Thank you for your interest in PHP.

Same as bug #25652 (shorter report + good example)




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

[2003-07-31 03:21:46] tony2001 at phpclub dot net

ok, here is some workaround on this problem:
in case of
<?
class Test {
    var $var = Array('test_function');
    function test_function($echo_var) {
        echo $echo_var;
    }
}

$test_obj = new test;
$test_obj->var[0]('bla');
?>
you can avoid Fatal error in last string using this instead:
<?
$test_obj->{$test_obj->var[0]}('bla');
?>

But in case of:
<?
class Test {
    var $var = Array('test_function');
}

function test_function($echo_var) {
    echo $echo_var;
}
?>
(i.e. you need to call a function, not a method, which name is
contained in objects, attribute) it seems, that there is no way, but
use this temporary variable:
<?
$test_obj = new test;
$tmp = $test_obj->var[0];
$tmp('bla');
?>

And another one important info:
in CVS version of Smarty this trouble is already solved.

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

[2003-07-29 15:38:17] tony2001 at phpclub dot net

Maybe you're right. But this syntax works as I expect with PHP4 and I
suppose this is a BC problem.
I really do not know how implementation of this syntax in ZE2 differs
from ZE1, but I expected it to continue to work in the same way. My
apologies if I was wrong.

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

[2003-07-27 07:13:03] [EMAIL PROTECTED]

Why with "$object->attribute()"
"$object->method_name()" should be called and not
"$object->attribute()" and how the engine is supposed to tell that? Is
$foo->x() now meaning "call method 'x' of object '$foo'" or "take
property 'x' of object '$foo' and call method with this name on object
'$foo'"? My opinion is that it _always_ should mean the latter and
never the former. 

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

[2003-07-10 07:57:44] tony2001 at phpclub dot net

I expect that using attribute of the object as method name it will work
as it's already working with PHP4.

That is:
$object->attribute = 'method_name';
and with
$object->attribute();
$object->method_name(); should be called.
Maybe I'm wrong, but in case of $object->obj_attribute->attribute(); we
have the same situation - we're calling
$object->obj_attribite->{method, which name contains
$object->obj_attribute->attribute }();

Am I wrong?

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

[2003-07-10 07:19:37] [EMAIL PROTECTED]

What is expected to be result of $test_obj->array_var[0][0][0]("simple
test") call?

Which function or method of which object should be called? What with
$test_obj->foo->array_var[0][0][0]("simple test") - should the calling
object be $test_obj and function name array_var[0][0][0] (should it be
global $array_var[0][0][0]? global $foo->array_var[0][0][0]? or
property foo->array_var[0][0][0] of $test_obj?) or the calling object
should be $test_obj->foo and array_var[0][0][0] should be the method
name?

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

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/24286

-- 
Edit this bug report at http://bugs.php.net/?id=24286&edit=1

Reply via email to