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