好吧,我的问题如下;列出某个类的所有对象
我有一个类描述一个宠物与这个构造函数;
public function __construct($name, $type, $age)
所以我想要做的就是让一些宠物的对象,那么我想打印这个类的所有对象的所有属性,使得它看起来就像this
什么最好的方式去做呢?我知道如何迭代对象的变量,但我主要关心的是如何遍历某个类的所有对象。如果有人能够向我展示某个代码示例,我会很喜欢它,特别是如果有一种方法可以不使用数组。
任何帮助表示赞赏!
好吧,我的问题如下;列出某个类的所有对象
我有一个类描述一个宠物与这个构造函数;
public function __construct($name, $type, $age)
所以我想要做的就是让一些宠物的对象,那么我想打印这个类的所有对象的所有属性,使得它看起来就像this
什么最好的方式去做呢?我知道如何迭代对象的变量,但我主要关心的是如何遍历某个类的所有对象。如果有人能够向我展示某个代码示例,我会很喜欢它,特别是如果有一种方法可以不使用数组。
任何帮助表示赞赏!
通常你会希望有跟踪你所创建的实例的一些方法,也许在一个数组或某种包含类中。
但只是就事论事,你可以检查所有的变量在当前范围内与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);
你可以在类的构造函数,追加$this
到的静态数组保持这种类型的所有元素:
class Pet {
public static $allPets = array();
function __construct($name, $type, $age) {
self::$allPets[] = $this;
// more construction
}
}
你所有的宠物对象列表现在在Pet::$allPets
。
嗯,你可以创建一个自定义创建选项,并使用静态变量来存储每个创建类的实例
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;
}
我会做一个foreach环
foreach($myobject as $key => $pent)
{
echo $key;
echo $pent;
}
重复:http://stackoverflow.com/questions/475569/get-all-instances-of-a-class-in-php/483094 – troelskn 2010-01-31 19:26:46