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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.