好的,我的问题如下;
我有一个用这个构造函数描述宠物的类;
public function __construct($name, $type, $age)
Run Code Online (Sandbox Code Playgroud)
所以我想做的是制作一些宠物对象,然后我想打印这个类的所有对象的所有属性,使它看起来像这样
最好的方法是什么?我知道如何遍历对象的变量,但我主要关心的是如何遍历某个类的所有对象.如果有人能给我看一些代码示例,我会很高兴,特别是如果有一种方法可以不使用数组.
任何帮助表示赞赏!
您可以在类构造函数中追加$this一个静态数组,该数组保留此类型的所有元素:
class Pet {
public static $allPets = array();
function __construct($name, $type, $age) {
self::$allPets[] = $this;
// more construction
}
}
Run Code Online (Sandbox Code Playgroud)
您的所有Pet对象列表现在都在Pet::$allPets.
通常,您希望有某种方法来跟踪您创建的实例,可能是在数组或某种包含类中。
但为了论证,您可以使用get_define_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);
Run Code Online (Sandbox Code Playgroud)