Re: [SMARTY-DEV] foreach tag and objects

[email protected] (Boris Bezrukov)
Newsgroups php.smarty.dev
Message-ID <[email protected]>
Boris Bezrukov wrote:

> David Zülke wrote:
>
>> Boris,
>>
>> I looked at your patch. You're removing the type casting of the 
>> variable to
>> an array. I believe this was done intentionally, because casting an 
>> int to
>> an array creates an array with one value, the int. Same goes for other
>> variable types. You cannot simply remove this.
>>
>> David
>>
>>  
>>
> David,
>
> Yes, it does create, that what I was talking about. And it's, in fact, 
> hack to allow people use scalars (scalars! not objects) in foreach 
> tag. That's not bad, but it closes posibilities of using objects 
> inside foreach tag. My patch will broke bc, yep... I apologize, do not 
> commit it. But use if (!is_object($foo)) $foo = (array)$foo; then. And 
> this will probably break one's script too. So is the price. It's 
> _really_ bad not to give people posibilities to use iterators inside 
> templates. PHP5 is OOP-driven, you can't steal such an important 
> language feature. Patch with !is_object attached.
>
I did it again :]. New patch attached here. Sorry.

>>  
>>
>>> -----Original Message-----
>>> From: Boris Bezrukov [mailto:[email protected]]
>>> Sent: Monday, January 10, 2005 5:59 PM
>>> To: Boris Bezrukov
>>> Cc: [email protected]
>>> Subject: Re: [SMARTY-DEV] foreach tag and objects
>>>
>>> Boris Bezrukov wrote:
>>>
>>>   
>>>
>>>> Hello.
>>>> Smarty does use (array)$from syntax within compiled {foreach} tag. I
>>>> suppose that was introduced to avoid errors with $from in scalar data
>>>> types? Is indeed comfortable for PHP4, but PHP5 had introduced
>>>> iterators, so objects can now be used within foreach construct either.
>>>> How do you think if it should be removed? Yep, it can be replaced with
>>>> something like if(!is_object), but should it?
>>>>
>>>> Patch removing them attached.
>>>>
>>>> Thank you.
>>>>
>>>>     
>>>
>>> Forgot to attach file.
>>>   
>>
>>
>>  
>>
>
oop.diff (text/x-patch, 765 B)
Index: libs/Smarty_Compiler.class.php
===================================================================
RCS file: /repository/smarty/libs/Smarty_Compiler.class.php,v
retrieving revision 1.356
diff -r1.356 Smarty_Compiler.class.php
1162c1162,1163
<             $output .= "{$foreach_props} = array('total' => count(\$_from = (array)$from), 'iteration' => 0);\n";
---
>             $output .= "if (!is_oject($from)) $from = (array)$from;";
>             $output .= "{$foreach_props} = array('total' => count(\$_from = $from), 'iteration' => 0);\n";
1167c1168,1169
<             $output .= "if (count(\$_from = (array)$from)):\n";
---
>             $output .= "if (!is_oject($from)) $from = (array)$from;";
>             $output .= "if (count(\$_from = $from)):\n";
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.