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