Если я расширяю статический класс в PHP, а родительский класс ссылается на «self ::», будет ли это ссылаться на self в расширенном классе? - PullRequest
1 голос
/ 16 сентября 2010

Если я расширяю статический класс в PHP, а родительский класс ссылается на "self ::", будет ли это ссылаться на self в расширенном классе?

Так, например,

<?php 
Class A
{
    static $var  
    public static function guess(){self::$var = rand(); return $var}
}        

Class B extends Class A
{
    public static function getVar(){return self::$var}
}

Если я запустил B :: guess ();затем B :: getVar ();

- это значение для Var, хранящееся в A :: $ var или B :: $ var?

Спасибо.

Ответы [ 2 ]

5 голосов
/ 16 сентября 2010

Позднее статическое связывание было введено в PHP 5.3, оно позволяет вам контролировать это поведение.

3 голосов
/ 16 сентября 2010

Это легко проверить:

class ClassA {
    public static function test(){ self::getVar(); }
    public static function getVar(){ echo 'A'; }
}        

class ClassB extends ClassA {
    public static function getVar(){ echo 'B'; }
}

ClassA::test(); // prints 'A'

ClassB::test(); // also prints 'A'

... надеюсь, это поможет:)

...