Хорошо, моя проблема заключается в следующем:
У меня есть класс, описывающий домашнее животное с этим конструктором;
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; }