Re: [SMARTY] Re: object calls fail after upgrade to 2.6.4
Monte Ohrt <[email protected]>
| Newsgroups | gmane.comp.php.smarty.general,gmane.comp.php.smarty.devel |
|---|---|
| Message-ID | <[email protected]> |
I committed CVS the ability to put objects in arbitrary parameter
positions. See if that works, and thanks for testing.
hans wrote:
>Hi Monte,
>
>On Thu, 9 Sep 2004, Monte Ohrt wrote:
>
>
>
>>The reason objects as parameters to objects was not allowed is because
>>PCRE does not support infinite recursion, and this would certainly not
>>be practical to parse:
>>
>>{$foo->bar($foo->bar($foo->bar(...)))}
>>
>>
>
>Oh yes, I see. If only PHP had a Parse::RecDescent as Perl has :-)
>
>
>
>>However, since there is code relying on these little discrepancies, I
>>have just committed to CVS the ability to do one level of object
>>nesting. So, this is valid syntax:
>>
>>{$foo->bar($foo->bar))}
>>{$foo->bar($foo->bar()))}
>>{$foo->bar($foo->bar($foo)))}
>>{$foo->bar($foo->bar($foo,$bar.blah,0))}
>>
>>However this is NOT permitted:
>>
>>{$foo->bar($foo->bar($foo->bar)))}
>>
>>
>
>This is very good news! One level should be sufficient.
>
>
>
>>Please test and let me know if there are problems.
>>
>>
>
>It looks pretty good now. I could only find one case that is still causing
>a parser error:
>
> {$obj->meth("foo", $obj->val)}
>
>To make your life easier, I have extended the testcase that I sent earlier
>today. It includes the above failing case. Maybe it could be integrated in
>the unit test suite.
>
>A last word: thank you very much for your quick help on this matter. It is
>very much appreciated.
>
>Hans
>
>!DSPAM:41408e9f221728588224860!
>
>
>------------------------------------------------------------------------
>
>Index: unit_test/test_cases.php
>===================================================================
>RCS file: /repository/smarty/unit_test/test_cases.php,v
>retrieving revision 1.7
>diff -u -r1.7 test_cases.php
>--- unit_test/test_cases.php 12 Apr 2004 12:21:39 -0000 1.7
>+++ unit_test/test_cases.php 9 Sep 2004 17:03:17 -0000
>@@ -3,6 +3,16 @@
> require_once './config.php';
> require_once SMARTY_DIR . 'Smarty.class.php';
> require_once 'PHPUnit.php';
>+
>+class Obj {
>+ var $val = 'val';
>+ var $arr = array('one' => 'one');
>+
>+ function meth($a="a", $b="b") {
>+ return "$a:$b";
>+ }
>+}
>+
>
> class SmartyTest extends PHPUnit_TestCase {
> // contains the object handle of the string class
>@@ -230,6 +240,22 @@
> $this->smarty->assign('foo', 'bar');
> $this->assertEquals($this->smarty->fetch('assign_var.tpl'), 'bar');
> }
>+
>+ // test assigning and calling an object
>+ function test_obj_meth() {
>+ $obj = new Obj();
>+ $this->smarty->assign('obj', $obj);
>+ $this->smarty->assign('foo', 'foo');
>+ $this->assertEquals(
>+'foo:2.5
>+2.5:foo
>+2.5:b
>+val:foo
>+foo:val
>+foo:foo
>+one:2
>+foo:foo:b', $this->smarty->fetch('assign_obj.tpl'));
>+ }
>
> /* CONFIG FILE TESTS */
>
>
>
>unit_test/templates/assign_var.tpl
>===================================================================
>{$obj->meth($foo, 2.5)}
>{$obj->meth(2.5, $foo)}
>{$obj->meth(2.5)}
>{$obj->meth($obj->val, "foo")}
>{$obj->meth("foo", $obj->val)}
>{$obj->meth("foo", $foo)}
>{$obj->meth($obj->arr.one, 2)}
>{$obj->meth($obj->meth("foo", $foo))}
>
>
--
Smarty General Mailing List (http://smarty.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php