Список всех объектов определенного класса

Хорошо, моя проблема заключается в следующем:

У меня есть класс, описывающий домашнее животное с этим конструктором;

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

Итак, что я хочу сделать, это сделать несколько домашних объектов, тогда я хочу напечатать все атрибуты всех объектов этого класса, чтобы он выглядел примерно так

Каков наилучший способ этого? Я знаю, как перебирать переменные объекта, но моя главная проблема заключается в том, как перебирать все объекты определенного класса. Мне было бы очень приятно, если бы кто-нибудь мог показать мне пример кода, особенно если есть способ сделать это без использования массивов.

Любая помощь приветствуется!

Обычно вы ожидаете иметь некоторый способ отслеживания созданных вами экземпляров, возможно, в массиве или каком-то классе.

Но ради аргумента вы можете проверить все переменные в текущей области с помощью 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 теперь находится в 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; }