php抽象类

时间:2017-07-03 21:35:45

标签: php

如果你有一个抽象类,有没有办法在抽象类中保留一个计数器来计算它被使用了多少次?

因为如果我这样做:

abstract class abstractClassName {

    private $counter = 0;

    public function __construct() {
     $this->counter++;
   }

   public function outputCounter() {
     echo $this->counter;
   }

}

class someExtension extends abstractClassName {

  public function __construct() {
    parent::__construct();
  }
}

class someExtensionTwo extends abstractClassName {

  public function __construct() {
    parent::__construct();
  }
}

然后

$class = new someExtension;
$class->outputCounter();
$class2 = new someExtensionTwo;
$class2->outputCounter();

我得到了两次,但我期望在最后一次通话中获得1和2,并且我对它的工作方式感到困惑。

编辑:更改代码以更多地反映真实代码:)

1 个答案:

答案 0 :(得分:3)

如果您希望跟踪实例化类AbstractClassName的时间,则需要使用静态变量 - 以使$this->counter的值保持不变,例如:

abstract class abstractClassName
{
    private static $counter = 0;

    public function __construct() {
      self::$counter++;
    }

    public function outputCounter() {
     echo self::$counter;
    }
}

class someExtension extends abstractClassName
{
   public function __construct() {
     parent::__construct();
   }
 }

class someOtherExtension extends abstractClassName
{
   public function __construct() {
     parent::__construct();
   }
 }

$class = new someExtension;
$class->outputCounter();

$class2 = new someOtherExtension;
$class2->outputCounter();

这将导致输出:1& 2。