On 10/18/07, Joshua Bacher <[EMAIL PROTECTED]> wrote:
>
> Hi all,
>
> i faced the following problem.
>
> i am using a API. This API has a class that looks like following:
> <snip>
> class foo{
>         public function bar(){
>                 static $foobar=false;
>                 if ($foobar === False){
>                         $foobar='FUBeyondAllR';
>                         echo "$foobar\n";
>                 }else{echo "already defined\n";}
>         }
> }
> </snip>
> if you call the method of this class twice it will first print
> FUBeyondAllR and at the second time it will echo 'already defined'.
> (examples at the next and the last snippet)
>
> thats fine but what if you have some processing in the first if case? it
> would make sense then to unset this variable, right? No way, you can't
> acces it:
>
> <snip>
> $f=new foo();
> $f->bar();
> $f->bar();
> foo::$foobar=false;
> $f->bar();
> </snip>
>
> will lead to the following (called by `php5 fubar.php`):
>
> <snip>
> FUBeyondAllR
> already defined
>
> Fatal error: Access to undeclared static property:  foo::$foobar in xxxxx
> on line 14
> </snip>
>
> I need to recall the expressions encapsulated in the if-statement, but
> this
> fu variable behaves like it is protected, right? Does that make sense? Is
> there
> any way to unset this variable?
>
> I can't touch the API.
>
> Thanks for your suggestions and your time.
>
> josh
>

i have never use static variables inside of functions and likely never will.
go for static class variables instead :)

<?php
class foo{
        public static $foobar = false;
        public function bar(){
                static $foobar=false;
                if (self::$foobar === False){
                        self::$foobar='FUBeyondAllR';
                        echo self::$foobar . "\n";
                }else{echo "already defined\n";}
        }
}

$f=new foo();
$f->bar();
$f->bar();
foo::$foobar=false;
$f->bar();
?>

[EMAIL PROTECTED] ~/working/www/siuConference $ php testScript.php
FUBeyondAllR
already defined
FUBeyondAllR

-nathan

Reply via email to