Personally, I think that variable scope handling works great the way it
is--particularly if you turn on error reporting. This way you have to
explicitly declare that you will be accessing a global variable and
don't run the risk of messing things up without thinking about it.

You could argue that a bit of discipline could solve this problem--but
then again a bit of discipline also makes you use the scoping the way it
is and come away clean without any major problems!

--Mt.

On Mon, 2002-10-21 at 21:19, Hans Zaunere wrote:
> 
> --- Marco Tabini <[EMAIL PROTECTED]> wrote:
> > Well, you have to admit that the issue of variable scope is the first
> > thing that hits someone who approaches PHP for the first time and
> > comes from other backgrounds, like C or ASP!
> > 
> > Still, after one adapts to this apparent "weirdness" of scoping, it
> > tends to grow on you. I find that no scope inheritance gives me one
> > less thing to worry about when writing code...
> 
> While some of the scoping tricks proposed seem like potential overkill,
> I've yearned for a way to explicitly declare a variable a
> "super-global".  Sure, I can stick it in one of the predefined
> super-globals, but that just seems wrong.
> 
> Something like: 
> 
> super $avar;
> 
> would be very useful for large projects and wouldn't cause a lot of
> harm otherwise.
> 
> Hans
> 
> 
> > 
> > 
> > Marco
> > 
> > On Sun, 2002-10-20 at 22:41, Rasmus Lerdorf wrote:
> > > How in the world do you know that "code will run faster" ?
> > > 
> > > Implementing your suggestion would take quite a lot of changes to
> > the
> > > internals of PHP.  Instead of just a global and a current symbol
> > table, we
> > > would now need basically an unlimited number of symbol tables and
> > every
> > > variable lookup would become more complex.  Ergo it would slow
> > things
> > > down.
> > > 
> > > -Rasmus
> > > 
> > > On Mon, 21 Oct 2002, NTPT wrote:
> > > 
> > > > Hi.
> > > > I have some idea and suggestion  how to extend PHP language a bit
> > in some
> > > > way. That may probably lead to increasing of php flexibility,
> > allow more
> > > > modular coding to be done etc....
> > > >
> > > >
> > > > My sugestion is simple:
> > > > Allow  PHP programmer to explicitelly  told , WHAT variable scope
> > will be
> > > > used  inside user defined  functions.
> > > >
> > > > In the traditional approach (afaik , i use php 4.2.2 ), as is
> > described in
> > > > the manual of php there a diferent varable scopes for each
> > functions , only
> > > > syntax " global $valuename" ; can lead to use variables global.
> > This aproach
> > > > is traditional and well known and is sufficient for most tasks.(I
> > say
> > > > sufficient, not effective...). My idea is going a bit behind it.
> > > >
> > > > I suggest  to introduce new keyword(s) or function(s)  into the
> > PHP language
> > > > definiton
> > > > (i suggest syntax like  "var_scope scope" or  var_scope("scope")
> > )
> > > >
> > > > That keywords SHOULD be used in user defined  functions to 
> > EXPLICITLY
> > > > define, WHAT kind of variable scope will be used inside this
> > function.
> > > >
> > > > scope can be either
> > > >
> > > > 'local' = it means, that all variables used in this function 
> > have a local
> > > > scope only.(it means like traditional behavior of php and its
> > variable
> > > > scopes until now )
> > > >
> > > > 'global' = each variable used in the function  is from global
> > scope. Similar
> > > > to "global $variable_1,$variable_2........... $each variable used
> > in the
> > > > main execution line of the script"
> > > >
> > > > 'caller' or 'inherit' This is MOST USEFUL part of the idea .
> > Function
> > > > variable scope is the SAME as from where the function was called.
> > (if
> > > > functino bar(),with have var_scope set to 'caller', is called
> > from function
> > > > foo() it have the same variable scope as function foo(), almost
> > like the
> > > > code of function bar() was included (by include "something" )
> > somewhere
> > > > inside foo() )
> > > >
> > > >
> > > > A little example code for demonstrating idea of the syntax and
> > how it should
> > > > work:
> > > > */
> > > > <?
> > > >
> > > > $a=10;
> > > >
> > > > echo "Varaible $a".$a;
> > > > .
> > > > $foo_output =foo();
> > > > echo "<br>value returnded by foo() ".$foooutput;
> > > > echo "<br>value $a after  calling  foo() but before calling bar()
> > ".$a;
> > > >
> > > > $bar_output=bar();
> > > > echo "<br>value returnded by bar() ".$bar_output;
> > > > .
> > > > .
> > > > echo "<br>value $a after  calling  bar() ".$a;
> > > >
> > > > function foo()
> > > >  {
> > > >  $a=20;
> > > >  echo "$a inside function foo() = ".$a
> > > >  /* $bar_inside foo = bar();
> > > >  echo "Variable $a inside function foo() after calling bar()".$a;
> > > >
> > > >  */
> > > >  .
> > > >  .
> > > >
> > > >  return $a;
> > > >
> > > >  }
> > > >
> > > >
> > > > function bar()
> > > >  {
> > > >  var_scope caller // we have the SAME variable scope  as from
> > where we are
> > > > called
> > > >  $a=100;
> > > >  .
> > > >  .
> > > >  .
> > > >  return $a;
> > > >  }
> > > > ?>
> > > > this should return :  (with comments behind // )
> > > >
> > > > Varaible $a" 10
> > > > $a inside function foo() = 20
> > > > value returnded by foo() 20
> > > > value $a after  calling  foo() but before calling bar() 10
> > > > value returnded by bar() 100
> > > > value $a after  calling  bar() 100  //  var_scope is set to
> > 'caller', so $a
> > > > in global scope is modified inside bar() the some way, as if
> > global $a was
> > > > used )
> > > >
> > > > if you uncomment lines in  bar()....
> > > >
> > > > Varaible $a" 10
> > > > $a inside function foo() = 20
> > > > Variable $a inside function foo() after calling bar() 100  //
> > var_scope in
> > > > function bar() is set to caller, so $a IN SCOPE of foo() ONLY  is
> > modified
> > > > inside bar().
> > > >
> > > > value returnded by foo() 100
> > > > value $a after  calling  foo() but before calling bar() 10 //
> > var_scope in
> > > > function bar() is set to caller, so $a IN GLOBAL SCOPE is NOT
> > modified
> > > > inside bar().
> > > > value returnded by bar() 100
> > > > value $a after  calling  bar() 100  // var_scope is set to
> > caller, so $a in
> > > > global scope is modified inside bar() the some waz, as if global
> > $a was used
> > > >
> > > >
> > > > For WHAT it could be useful ??
> > > >
> > > >
> > > > for example for writing a  databaze extraction layer of any
> > aplication.
> > > > common  real life situations are similar like in this  example
> > code
> > > > (simplified  and abstracted from real life code of PHP
> > application I
> > > > currently write  )....
> > > >
> > > > <?
> > > > .
> > > > .
> > > > .
> > > > .
> > > > do something
> > > > .
> > > > .
> > > > .
> > > > // now you need a call subroutine
> > > >
> > > > $something=foo('cats','dogs','horses');
> > > > .
> > > > $different=bar('mices','meat','gras');
> > 
> === message truncated ===
> 
> 
> =====
> Hans Zaunere
> New York PHP
> http://nyphp.org
> [EMAIL PROTECTED]
> 
> __________________________________________________
> Do you Yahoo!?
> Y! Web Hosting - Let the expert host your web site
> http://webhosting.yahoo.com/
> 
> -- 
> PHP Development Mailing List <http://www.php.net/>
> To unsubscribe, visit: http://www.php.net/unsub.php
> 



-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to