计算 class 实例的特征

Trait that counts instances of class

我想做一个特征,这样我就可以轻松地计算和检索 class 的所有实例。 我知道我需要将它推送到一个数组,但我不知道我应该如何 "store" 数组。我使用 public、私有、静态等吗?

trait Countable
{
  public $all = array();

  public function addToObjects()
  {
    //do stuff
    $this->all[] = $this->somekindofproperty;
  }

}

我希望能够执行以下操作。

$c = new MyClass;
$objects = $c->all();

几乎每个 class 具有此特征的人都应该有自己的数组。

这里我定义了一个名为 countertrait 并在 class 中使用它来存储对象。

trait Counter
{
    public static $all = array();
    public static function addToObjects($object)
    {
        if (is_object($object))
        {
            self::$all[] = $object;
        }
    }

}
class CountingClass
{
    use Counter;
}
class MyClass
{
    public function __construct()
    {
        CountingClass::addToObjects($this);
    }
}

$c = new MyClass;
$c = new MyClass;
$c = new MyClass;
$c = new MyClass;

print_r(CountingClass::$all);

输出:

Array
(
    [0] => MyClass Object
        (
        )

    [1] => MyClass Object
        (
        )

    [2] => MyClass Object
        (
        )

    [3] => MyClass Object
        (
        )

)