PHP 5.3延迟静态绑定问题


PHP 5.3 Late static binding problem

<?php
class Base{
  protected static $somevar = false;
  public static function changeSomeVar(){
    static::$somevar = true;
  }
  public static function checkVar(){
    var_dump(static::$somevar);
  }
}
class Child1 extends Base{
  public static function setup(){
    static::changeSomeVar();
  }
}
class Child2 extends Base{
}
Child1::setup();
Child1::checkVar(); // true
Child2::checkVar(); // still true
?>

是否有办法使Child1$somevarChild2$somevar不同?

(我知道您可以在每个子类中手动编写protected static $somevar = false;,但这有点反直觉…)

如果您希望子类具有单独的类级别(静态)变量,则需要重新声明该变量。所以在子类中需要protected static $somevar = false;

当我想到其他语言中的类结构时,我很直观地要求它