[prev in list] [next in list] [prev in thread] [next in thread] 

List:       smarty-dev
Subject:    Re: [SMARTY-DEV] RE: [SMARTY] php5 Iterators.
From:       messju mohr <messju () lammfellpuschen ! de>
Date:       2005-02-01 17:28:39
Message-ID: 20050201172839.GN27279 () pharao ! serveftp ! org
[Download RAW message or body]

On Tue, Feb 01, 2005 at 08:46:13AM -0800, boots wrote:
> --- messju mohr <messju@lammfellpuschen.de> wrote:
> > 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.
>
> Will this be considered to bring iterator support into Smarty or are we
> simply not blocking it anymore?

i don't want to support any iterators. i just don't want objects to be
casted to arrays when passed to foreach.

> Because if we claim to support it, I
> suspect that while this patch will alleviate a first set of hurdles it
> will probably yield a new set of irritating questions and fumblings for
> those who hit up on the next unsupported and unchecked constraints.
> Iterators are a great feature but it really looks like they won't be
> solidly/completely implemented in PHP until 5.1. So I don't see the
> absolute rush. (For example, the iterator_to_array function (which is
> what I would think a cast to array *ought* do) should be available
> then)
> 
> Sigh. I'll go neutral on this -- people should have it if they want it,
> I guess. After all, it will be supported at some point.
> 
> xo boots
> 
> > 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 <dz@bitxtender.com> 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:jayboots@yahoo.com]
> > > > > Sent: Monday, January 24, 2005 11:19 AM
> > > > > To: David Z?lke; 'Mark Rogers'; smarty-dev@lists.php.net
> > > > > Cc: 'boots'
> > > > > Subject: RE: [SMARTY-DEV] RE: [SMARTY] php5 Iterators.
> > > > > 
> > > > > --- David Z|lke <dz@bitxtender.com> 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

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic