2017-03-19 2 views
1

J'ai un trait que je voudrais faire pour que je puisse facilement compter et récupérer toutes les instances de la classe. Je sais que je dois le pousser vers un tableau, mais je ne sais pas comment je devrais "stocker" le tableau. Est-ce que j'utilise public, private, static, etc?Trait qui compte les instances de la classe

trait Countable 
{ 
    public $all = array(); 

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

} 

Je veux être capable de quelque chose comme ce qui suit.

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

À peu près chaque classe avec ce trait devrait avoir son propre tableau.

+0

quand vous dites « toutes les instances de la classe » est-il la classe dans la sorcière que vous avez défini la méthode ou il y a quelques autres cours aussi? –

+0

toutes les classes qui ont le trait. – CriticalTheWizard

Répondre

1

Ici j'ai défini un trait avec le nom counter et l'ai utilisé dans une classe pour stocker des objets.

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

SORTIE:

Array 
(
    [0] => MyClass Object 
     (
     ) 

    [1] => MyClass Object 
     (
     ) 

    [2] => MyClass Object 
     (
     ) 

    [3] => MyClass Object 
     (
     ) 

) 
+0

Ce n'est pas tout à fait ce que je voulais. Je veux que le tableau soit ajouté à quand une nouvelle instance de la classe est créée. Je ne veux pas ajouter l'objet manuellement à chaque fois. – CriticalTheWizard

+0

@CriticalTheWizard Est-ce que vous voulez? –

+0

Ouais je pense que ça l'a fait. Je ne connaissais pas «self», c'est pourquoi j'avais probablement des problèmes. – CriticalTheWizard