RE: [SMARTY-DEV] RE: [SMARTY] php5 Iterators.
[email protected] (David Zülke)
| Newsgroups | php.smarty.dev |
|---|---|
| Organization | bitXtender GbR |
| Message-ID | <[email protected]> |
+1 - David > -----Original Message----- > From: messju mohr [mailto:[email protected]] > Sent: Tuesday, February 01, 2005 10:21 AM > To: boots > Cc: David Zülke; 'Mark Rogers'; [email protected] > Subject: Re: [SMARTY-DEV] RE: [SMARTY] php5 Iterators. > > i know i'm a bit late in this discussion, but could we please "add > this feature" to the 2.6.x-tree of Smarty? > > "add this feature" simply means omitting the (array)-cast for arrays > and objects. why is that such a big deal? > > sure $smarty.foreach.foo.total would be bogus on iterators, but as > someone already stated, people using iterators know that. > > we not only enable iterators, but also SipleXML to be usable with > smarty with just adding one line. > > Index: Smarty_Compiler.class.php > =================================================================== > RCS file: /repository/smarty/libs/Smarty_Compiler.class.php,v > retrieving revision 1.359 > diff -u -r1.359 Smarty_Compiler.class.php > --- Smarty_Compiler.class.php 30 Jan 2005 21:54:39 -0000 1.359 > +++ Smarty_Compiler.class.php 1 Feb 2005 09:16:35 -0000 > @@ -1172,14 +1172,15 @@ > } > > $output = '<?php '; > + $output .= "\$_from = $from; if (!is_array(\$_from) && > !is_object(\$_from)) { settype(\$_from, 'array'); }"; > if (isset($name)) { > $foreach_props = "\$this->_foreach[$name]"; > - $output .= "{$foreach_props} = array('total' => count(\$_from > = (array)$from), 'iteration' => 0);\n"; > + $output .= "{$foreach_props} = array('total' => > count(\$_from), 'iteration' => 0);\n"; > $output .= "if ({$foreach_props}['total'] > 0):\n"; > $output .= " foreach (\$_from as $key_part\$this- > >_tpl_vars['$item']):\n"; > $output .= " {$foreach_props}['iteration']++;\n"; > } else { > - $output .= "if (count(\$_from = (array)$from)):\n"; > + $output .= "if (count(\$_from)):\n"; > $output .= " foreach (\$_from as $key_part\$this- > >_tpl_vars['$item']):\n"; > } > $output .= '?>'; > > > > there is no diversion here and no making things more complicated to > please php4 and 5 with the same compiler. > > i really start getting pissed by people constantly stumbling about the > array-cast in foreach and constantly begging for this "feature". > > could we please change that? > > greetings > messju > > > On Tue, Jan 25, 2005 at 01:02:05PM -0800, boots wrote: > > The more I look at the iterator implementation in PHP5 (especially as > > it is in the 5.0.x builds) the more I think support for it should not > > be included into any 2.x series of Smarty. I think that a rewrite of > > Smarty specificially designed for PHP5 would be the "right" place to > > implement it. It still seems like awhile before that happens so perhaps > > talking about proposed feature sets, design and usage goals would be > > appropriate to get that ball rolling. > > > > As for 2.x support of iterators, I think it should be left out of the > > core and provided either as an addin or in a PHP5 only class that > > extends the base PHP4. Doing so can ease the transition as there are > > already requests for Smarty versions that obey E_STRICT and supplying > > an extended Smarty class intended for PHP5 is one way of supporting > > that and other features that would be oddball in the PHP4 > > implementation. > > > > xo boots > > > > --- David Z?lke <[email protected]> wrote: > > > We _could_ count the number of properties in the array using > > > count((array)$foo); I can't see any way of resolving item count, > > > position, > > > first/last etc from an iterator. People who're using iterators are > > > most > > > likely aware of this and can work around it or just live with that > > > "problem". > > > > > > You're right, it's time to tackle this one, but I also think the time > > > might > > > have come to do a complete PHP5 rewrite of Smarty. I'd be happy to > > > help. > > > > > > David > > > > > > > > > > -----Original Message----- > > > > From: boots [mailto:[email protected]] > > > > Sent: Monday, January 24, 2005 11:19 AM > > > > To: David Z?lke; 'Mark Rogers'; [email protected] > > > > Cc: 'boots' > > > > Subject: RE: [SMARTY-DEV] RE: [SMARTY] php5 Iterators. > > > > > > > > --- David Z|lke <[email protected]> wrote: > > > > > Couldn't we just change the array casting so it is only performed > > > if > > > > > the variable is _not_ an object? > > > > > > > > > > foreach($object as $key => $ value) {} > > > > > is the same as > > > > > foreach((array)$object as $key => $ value) {} > > > > > > > > > > Both will loop over the properties of an object. > > > > > > > > > > It will also work in PHP5. If there's an iterator defined, PHP > > > will > > > > > use it, if not, it will loop over the properties just like in the > > > > good > > > > > old times. > > > > > > > > This reminds me of some correspondance from last year -- back in > > > July > > > > messju raised this issue with Monte and I and at the end of it the > > > > following was proposed: > > > > > > > > $_from =& $this->_tpl_vars['list']; // by ref for php4 BC > > > > if ( count($_from) && ( is_array($_from) || is_object($_from) ) ): > > > > foreach ($_from as $this->_tpl_vars['cell']): > > > > ... > > > > endforeach; > > > > else: > > > > // err > > > > endif; > > > > unset($_from); > > > > > > > > At the time, messju was against the =& so as to not raise the > > > > possiblity of subtle bugs. Otherwise, we were all in agreement that > > > it > > > > was a reasonable approach. As I still haven't really delved into > > > PHP5, > > > > I am in no position to understand the minute issues that might > > > arise. > > > > My understanding is that there is a difficulty with count and the > > > need > > > > for certain interfaces to be implemented for this to work properly > > > for > > > > objects. For example, Bok proposed a different solution > > > > http://news.php.net/php.smarty.dev/2510 but messju pointed out some > > > of > > > > the issues that it raised: http://news.php.net/php.smarty.dev/2515 > > > > > > > > My only concern is that too much PHP5 specific code to check for > > > > correctness gets inserted into the foreach procedure thereby > > > hampering > > > > PHP4 performance in any way. Otherwise, it seems like the time is > > > > approaching where this needs to be addressed. > > > > > > > > xo boots > > > > > > > > -- > > > > Smarty Development Mailing List (http://smarty.php.net/) > > > > To unsubscribe, visit: http://www.php.net/unsub.php > > > > > > > > > > -- > > > Smarty Development Mailing List (http://smarty.php.net/) > > > To unsubscribe, visit: http://www.php.net/unsub.php > > > > > > > > > > -- > > Smarty Development Mailing List (http://smarty.php.net/) > > To unsubscribe, visit: http://www.php.net/unsub.php > > -- > Smarty Development Mailing List (http://smarty.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php >