PHP 5.3后期静态绑定问题

时间:2011-09-05 02:20:00

标签: php

<?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的{​​{1}}与$somevar的{​​{1}}不同?

(我知道你可以在每个子类中手动编写Child2,但这有点违反直觉..)

1 个答案:

答案 0 :(得分:2)

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

当我考虑其他语言的类结构时,要求它是非常直观的。