2017-03-19 89 views
1

我有一個我想做的特徵,所以我可以很容易地計算和檢索該類的所有實例。 我知道我需要將它推到一個數組,但我不知道如何「存儲」數組。我是否使用公共,私人,靜態等?計數類別實例的特徵

trait Countable 
{ 
    public $all = array(); 

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

} 

我希望能夠像下面這樣。

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

幾乎每個具有這種特徵的類都應該有它自己的數組。

+0

? –

+0

所有具有特質的類。 – CriticalTheWizard

回答

1

這裏我定義了一個名爲countertrait,並將它用於存儲對象的類。

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

OUTPUT:

Array 
(
    [0] => MyClass Object 
     (
     ) 

    [1] => MyClass Object 
     (
     ) 

    [2] => MyClass Object 
     (
     ) 

    [3] => MyClass Object 
     (
     ) 

) 
當你說「所有的類的實例」是它的類在女巫您定義的方法,或者是其他一些類太
+0

這不是我想要的。我想要在創建類的新實例時追加數組。我不想每次手動添加對象。 – CriticalTheWizard

+0

@CriticalTheWizard你想要這個嗎? –

+0

是的,我認爲這樣做。我不知道「自我」,所以我可能會遇到麻煩。 – CriticalTheWizard