Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 统计类实例的特性_Php_Oop_Traits - Fatal编程技术网

Php 统计类实例的特性

Php 统计类实例的特性,php,oop,traits,Php,Oop,Traits,我有一个特点,我想使我可以很容易地计数和检索类的所有实例。 我知道我需要将它推送到一个数组中,但我不知道如何“存储”数组。我是否使用公共、私有、静态等 trait Countable { public $all = array(); public function addToObjects() { //do stuff $this->all[] = $this->somekindofproperty; } } 我希望能够做到以下几点 $c = n

我有一个特点,我想使我可以很容易地计数和检索类的所有实例。 我知道我需要将它推送到一个数组中,但我不知道如何“存储”数组。我是否使用公共、私有、静态等

trait Countable
{
  public $all = array();

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

}
我希望能够做到以下几点

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

几乎每个具有此特性的类都应该有自己的数组。

在这里,我定义了一个名为
counter
特性
,并在类中使用它来存储对象

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
        (
        )

)

当你说“这个类的所有实例”时,是你定义了这个方法的类,还是其他一些类?所有具有这个特性的类。这不是我想要的。我希望在创建该类的新实例时将该数组附加到。我不想每次都手动添加对象。@CriticalTheWizard这是您想要的吗?是的,我想是这样的。我不知道self的情况,所以这就是我可能遇到麻烦的原因。