ID: 24286
Comment by: tony2001 at phpclub dot net
Reported By: terjeto at stud dot ntnu dot no
Status: Verified
Bug Type: Zend Engine 2 problem
Operating System: RedHat 9.0
PHP Version: 5CVS-2003-06-22 (dev)
New Comment:
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.
Previous Comments:
------------------------------------------------------------------------
[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?
------------------------------------------------------------------------
[2003-07-10 06:25:06] tony2001 at phpclub dot net
There is no matter what Smarty version do you use.
PHP complains on this syntax:
<?
class Test {
var $array_var = Array();
function test() {
$this->array_var[0][0][0] = "test_method";
}
function test_method($echo_var) {
echo $echo_var;
}
}
$test_obj = new test;
$test_obj->array_var[0][0][0]("simple test"); //line 15
?>
Fatal error: Method name must be a string in /www/index.php on line 15
Guys, please, fix this very annoying bug at least in beta2.
On 10 Jul 2003 this bug still exists in CVS.
------------------------------------------------------------------------
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