2016-04-25 1 views
1

Вот примерКак получить доступ к статическому члену в классе наследования?

class derp { 
    public static $importantVariable = "default"; 
    public function doSomethingImportant() { 
     echo self::$importantVariable; 
    } 
} 

class fancy extends derp { 
    public static $importantVariable = "special"; 
} 

$fancyInstance = new fancy(); 
$fancyInstance->doSomethingImportant(); 

ИТАК, я хочу, чтобы переопределить статический член «importantVariable» и сделать так, чтобы унаследованные функции используют перекрываться значение вместо значения базового класса.

В этом случае он говорит «default», но я хочу, чтобы он говорил «special», как мне заставить его ссылаться на значение overriden?

ответ

1

Вместо self используйте static:

class derp { 
    public static $importantVariable = "default"; 
    public function doSomethingImportant() { 
     echo static::$importantVariable; 
    } 
} 

static ключевое слово имеет преимущество late static binding так, что он будет принимать значения, определенного в конкретном классе используется во время выполнения а не класс, из которого только что делается ссылка, как в случае с ключевым словом self.

Смежные вопросы