好的我的问题如下;
我有一个用这个构造函数描述宠物的类;
public function __construct($name, $type, $age)
所以我想做的是制作一些pet对象,然后我想要打印这个类的所有对象的所有属性,使它看起来像this
最好的方法是什么?我知道如何遍历对象的变量,但我主要关心的是如何遍历某个类的所有对象。如果有人可以向我展示某些代码示例,我会很高兴,特别是如果有一种方法可以在不使用数组的情况下完成它。
感谢任何帮助!
答案 0 :(得分:6)
您可以在类构造函数中将$this
附加到保留此类型的所有元素的静态数组中:
class Pet {
public static $allPets = array();
function __construct($name, $type, $age) {
self::$allPets[] = $this;
// more construction
}
}
您所有Pet对象的列表现在位于Pet::$allPets
。
答案 1 :(得分:1)
我想这取决于你的结构,但是我有另一个包含所有生成的pet对象的对象/类,所以我会遍历它。
答案 2 :(得分: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;
}
答案 3 :(得分: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);
答案 4 :(得分:1)
我会做一个foreach循环
foreach($myobject as $key => $pent)
{
echo $key;
echo $pent;
}