Re: static variables inside static methods

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I think you are confusing  scope visibility  level of the variable within
method and the class.

Variable within the method is going to 1 because it was declare within the
test method and there no link to the one declared outside the test method.
The second case is referencing the varible of the class.



2011/7/6 Дмитрий Степанов <dmitrij@xxxxxxxxxxx>

> Hello, everybody.
>
> While working with static variables inside static class' methods, I have
> found this very interesting (at least for me) behavior of PHP.
>
> Consider the following class definitions (example #1):
>
> class X {
> public final static function test() {
> static $i;
> return ++$i;
> }
> }
>
> class Y extends X {
> }
>
> By executing this code:
>
> echo X::test();
> echo Y::test(); // note Y class here
>
> one would expect to see "12" as output, but apparently I get "11".
>
> That's a bit confusing if you logically assume that "static vars" are "tied
> to the scope" they're defined in. Since this static variable is
> defined in a specific static method test(), that is NOT overloaded by class
> Y, in my opinion it shoul've preserved it's value across static calls.
>
> Let's look at another example (example #2):
>
> class X {
> public static $x =0;
> public final static function test() {
> return ++static::$x; // note static keyword here
> }
> }
>
> class Y extends X {
> }
>
> If you run this code:
>
> echo X::test();
> echo Y::test();
>
> you get "12" as output - the expected output. Notice that the
> "++static::$x"
> expr. is taking advantage of late static binding. Now, if you change
> body of test() to the following code:
>
> public final static function test() {
> return ++self::$x;
> }
>
> then you also get "12" as output.
>
> Is this a bug that static context of $i is not preserved in example #1 or
> do
> I misunderstand something?
>
> I could not find any hints on this in the PHP documentation.
>
> Dmitry.
>

[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux