2010-01-31 70 views
6

好吧,我的问题如下;列出某个类的所有对象

我有一个类描述一个宠物与这个构造函数;

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

所以我想要做的就是让一些宠物的对象,那么我想打印这个类的所有对象的所有属性,使得它看起来就像this

什么最好的方式去做呢?我知道如何迭代对象的变量,但我主要关心的是如何遍历某个类的所有对象。如果有人能够向我展示某个代码示例,我会很喜欢它,特别是如果有一种方法可以不使用数组。

任何帮助表示赞赏!

+0

重复:http://stackoverflow.com/questions/475569/get-all-instances-of-a-class-in-php/483094 – troelskn 2010-01-31 19:26:46

回答

1

通常你会希望有跟踪你所创建的实例的一些方法,也许在一个数组或某种包含类中。

但只是就事论事,你可以检查所有的变量在当前范围内与get_defined_vars(),递归搜索任何数组或对象,你会发现,像这样的东西:

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

你可以在类的构造函数,追加$this到的静态数组保持这种类型的所有元素:

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

你所有的宠物对象列表现在在Pet::$allPets

1

我想这取决于你的结构,但我有另一个对象/类包含所有生成的宠物对象,所以我会循环通过。

+0

也许是如何创建该对象的实例,将有助于? – DForck42 2016-10-31 18:18:57

1

嗯,你可以创建一个自定义创建选项,并使用静态变量来存储每个创建类的实例

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; 
} 
1

我会做一个foreach环

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

} 
相关问题