php static property

后端 未结 4 636
隐瞒了意图╮
隐瞒了意图╮ 2021-01-08 01:11

I have two code snippets (regarding the static keyword) which I expect them to have same output, but actually the outputs are different.

The question is

相关标签:
4条回答
  • 2021-01-08 01:46

    If you pass a static variable to a subclass, then this variable is shared (it always has the same value in both classes). If you overwrite the static variable in a subclass, then its a new static variable independent of the static variable from the parent.

    In Snippet 1 base::var and sub::var have different memory allocations, because you defined $var = 2; in the class sub.

    In Snippet 2 base::var and sub::var have the same memory allocation, because you did not specify $var2 in the class sub2.

    Thats why base:var is not changing. It would also not change if you change $var from sub class later like this:

    class base
    {
        public static $var = 1;
    }
    
    class sub extends base
    {
        public static $var = 2;
    }
    sub::var = 3
    echo base::var; // Outputs 1
    
    0 讨论(0)
  • 2021-01-08 01:50

    I would like to add one more point to it.

    STATIC variable are not associated to any particular instance/object of a class. Hence you modify the variable with Parent Class reference or Child Class reference, the same copy gets modified.

    Hence apart from understanding Public Static as Global, Please understand it as not associated to any particular instance, hence with any class hierarchy reference you update a static variable , same memory location gets updated.

    --

    Vinod

    0 讨论(0)
  • 2021-01-08 02:01

    Public static variable acts like global variable.

    As the scope of public static variable lies globally, you can ensure that any changes to the global variable can be seen across the program.This concept, you can analyze in your sample program....

    Please have look in Static variable inheritance.

    0 讨论(0)
  • 2021-01-08 02:07

    Since the sub2 class does not have var2 it takes the value of the base2 class.So when u assigned a new value using this sub2::$var2 = 2; it changed to new value.

    In first code you have overridden that in your extended class.Both variable have scope inside their respective classes.

    0 讨论(0)
提交回复
热议问题