Belli bir sınıfın tüm nesneleri listeleme

5 Cevap php

Aşağıdaki gibi ok benim sorunum;

Ben bu kurucu ile bir evcil hayvan tanımlayan bir sınıf var;

public function __construct($name, $type, $age)

Peki ne yapmak istiyorum hayvan nesnelerin bir dizi yapmak, o ben this gibi bir şey görünüyor ki, bu sınıfın tüm nesnelerin tüm özelliklerini yazdırmak istiyorum

Bu konuda giden en iyi yolu nedir? Ben bir nesnenin değişkenleri nasıl yinelendiğini biliyorum, ama benim asıl sorun, belirli bir sınıfın tüm nesneleri nasıl yinelendiğini olduğunu. Birisi dizilerin kullanımı olmadan bunu yapmak için bir yol var, özellikle eğer bana bir şey bir kod örneği göstermek olabilir, ben bunu isterim.

Herhangi bir Yardım takdir!

5 Cevap

Normalde belki bir dizi ya da sınıf içeren bir tür, oluşturduğunuz örneklerini izleme bazı yolu olması beklenebilir.

Ancak tartışmanın uğruna, böyle bir şey ile, ardışık herhangi dizileri ararken veya bulmaya nesneleri, get_defined_vars() ile geçerli kapsamda tüm değişkenleri kontrol edebilir:

function findInstancesOf($classname, $vars)
{
    foreach($vars as $name=>$var)
    {
        if (is_a($var, classname)) 
        {
             //dump it here
             echo "$name is a $classname<br>";

        }
        elseif(is_array($var))
        {
             //recursively search array     
             findInstancesOf($classname, $var);
        }
        elseif(is_object($var))
        {
             //recursively search object members
             $members=get_object_var($var);     
             findInstancesOf($classname, $members);
        }
    }
}

$vars = get_defined_vars();
findInstancesOf('MyPetClass', $vars);

Sen, sınıf yapıcısı olarak, $this Bu türdeki tüm unsurları tutar statik bir dizi append olabilir:

class Pet {
    public static $allPets = array();
    function __construct($name, $type, $age) {
        self::$allPets[] = $this;
        // more construction
    }
}

Pet nesneler tüm listeniz Pet::$allPets şimdi.

Ben sizin yapısına bağlıdır sanırım, ama üretilen tüm evcil nesneleri içeren başka bir nesne / sınıf olurdu, bu yüzden bu döngü olur.

Peki, özel bir seçeneği oluşturmak yapmak ve yaratılan her sınıfın bir örneğini saklamak için statik değişkenleri kullanabilirsiniz

Class Pet
{
     public static $pets = array();
     public static create($name, $type, $age)
     {
         $pet = new Pet($name, $type, $age);
         self::$pets[] = $pet;
         return $pet;
     }
}
Pet::createPet("test", "test", 42);
Pet::createPet("test", "test", 42);
Pet::createPet("test", "test", 42);

foreach(Pet::$pets as $pet)
{
    echo $pet->name;
}

i bir foreach döngü yapmak istiyorum

foreach($myobject as $key => $pent)
{
 echo $key;
 echo $pent;

}