Martin Scotta

On Thu, Jun 23, 2011 at 12:12 PM, Paul Dragoonis <dragoo...@gmail.com>wrote:

> On Thu, Jun 23, 2011 at 4:09 PM, Ferenc Kovacs <tyr...@gmail.com> wrote:
>
> > On Thu, Jun 23, 2011 at 5:03 PM, Stefan Neufeind <neufe...@php.net>
> wrote:
> >
> > > Hi,
> > >
> > > I've lately discussed with a colleague which scopes of variables exist
> > > for PHP or would probably make sense. In general I think the general
> > > idea of having variables available all throughout a function is okay as
> > > this allows things like
> > >
> > > foreach($vals as $v) {
> > >  // ...
> > >  $found = true;
> > > }
> > > if($found) {
> > >  // ...
> > > }
> > >
> > > (setting $found inside the loop while still being able to access it
> > > outside)
> > >
> > > But the interesting part is that $v is also still available outside the
> > > loop (last value). While most people would say this is not a big
> > > problem, it can become problematic when using references.
> > >
> > > foreach($vals as &$temp) {
> > >  // ...
> > > }
> > > // ...
> > > $temp = 5;
> > > (when you don't think about the reference anymore but want some
> > > temp-variable)
> > >
> > >
> > > If this has been "throughly discussed" before, please excuse. But if
> not
> > > maybe somebody could share his oppinion on the following proposal.
> > >
> > > What if we (for example with PHP 5.4 or if not possible maybe with the
> > > next one) change the behaviour so that
> > >
> > > * variables used for key/value in foreach (probably other places?)
> would
> > > be limited to that loop-scope
> > >
> > > and maybe
> > > * variable $found in the first example would need to be initialised
> > > before the loop. Otherwise it would be a new variable inside the scope
> > > of foreach that would be gone afterwards
> > >
> > > and/or maybe
> > > * allowing to explicitly limit variable-scopes inside blocks, for
> > > example by allowing    var $found   somewhere inside a function to
> allow
> > > things like
> > >
> > > if($a) {
> > >  var $temp;
> > >
> > >  $temp = 5;
> > > }
> > > // and $temp would be gone here; was limited to the scope in which it
> > > was defined by var
> > >
> > >
> > > Hope this is not too much of a non-sense idea to you :-)
> > >
> > >
> > Hi,
> >
> > it was discussed many times on the list, and this behavior is also
> > documented, see
> > http://php.net/manual/en/control-structures.foreach.php
> >
> > "Reference of a $value and the last array element remain even after the
> > foreach loop. It is recommended to destroy it by unset()."
> >
> > personally I find that weird, and unintuitive, but changin that in a
> major
> > or minor version could be changed if we chose to.
> >
> >
> I would like to see, in a future version, the local var of the foreach()'s
> refcount being dropped to 0 or something similar. Unless it is a
> by-reference variable in which case it should remain untouched.
>
>
> > Tyrael
> >
>


Also I've love to be able to....

$var = 'global';
class Foo {
   private $var = 'member';

   function test1() {
       return $var;
   }

   function test2($var='param') {
       return $var;
   }

   function test3() {
       $var = 'variable';
       return $var;
   }

   function test4() {
       global $var;
       return $var;
   }
}

$foo = new Foo();
var_dump( $foo->test1() ); // member
var_dump( $foo->test2() ); // param
var_dump( $foo->test3() ); // variable
var_dump( $foo->test4() ); // global

>From a "language" POV this seems very possible.
Is it possible from a core POV ?
Do you think this need a RFC? I can write some

Reply via email to