Colin Guthrie wrote:
Stut wrote:
Stut wrote:
In that case you need a new foo. That's the only way you're going to
reset the internal static if the API doesn't give you a way to do it.
$f=new foo();
$f->bar();
$f->bar();
$g=new foo();
$g->bar();
Actually, scratch that, won't work. Not even unsetting $f before
creating the new object works. This kinda sucks since it means PHP does
not support static function-scoped vars.
Yeah I tried that same thing too and then wondered if I had
misinterpreted how function-scoped statics worked.
I've often used a method like:
function Init()
{
static $bln_inited = false;
if (!$bln_inited)
{
// Do stuff
$bln_inited = true;
}
}
I had always assumed that the static definition here was
function-scoped... I guess I should have tested more but still it caught
me off guard this morning when I played with it.
Correct me if I'm wrong but does C++ not do it as both of us initially
thought? e.g. static is function scoped rather than globally scoped when
used within a class method?
Yes it does, which is why I assumed PHP would do it like that too. I
knew I should have tried it before sending the reply.
I've tried various ways of accessing that variable via a derived class
but it doesn't seem to be possible. Again I'm just assuming, but my
theory is that the line...
static $foobar = false;
...actually is static to the function and therefore cannot be accessed
from outside it in any way, shape or form.
So using function statics as you have above will work fine. And they
also work fine when used in a method of a class. This behaviour is
correct because if a function-scoped static is to work correctly there
should be absolutely no way to get at it from outside the function.
-Stut
--
http://stut.net/
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php