@pilolin
HTML программист

Что не так делаю при создании объектов?

Разбираюсь с таким важным понятием как ООП и применение его в php. Теорию уже прочел вроде понял. Но как дело дошло до практики которую сам придумал чет застрял. Итак суть задачи и мое решение.
Есть некий xml который хранит в себе жилые комплексы, они в себе дома, далее квартиры (но пока остановлюсь на первом).
Структура следующая
<complexes>
	<complex>
		<id>1</id>
		<name>ЖК 1</name>
	<complex>
	<complex>
		<id>2</id>
		<name>ЖК 2</name>
	<complex>
<complexes>

Полей намного больше, но мне они не нужны. Хотел собрать свой объект в котором буду эти поля со своими названиями свойств объекта.
Создаю класс "Комплексы" и "Комплекс".
class Complexes {
	private $complexes = array();

	public function addComplex($id, $complex) {
		$this->complexes[$id] = $complex; 
	}

	public function showComplexes() {
		print_r($this);
	}
}
class Subject {
	protected $id;
	protected $name;

	function __construct($subject) {
		$this->id = $subject->id;
		$this->name = $subject->name;
	}

	public function var_d() {
		print_f($this);
	}

}

Создаю объект "Комплексы"
$complexes = new Complexes();
Далее в цикле пробегаю комплексы, создаю объекты (как то их дополнительно обрабатываю) и добавляю в "Комплексы"
foreach($xml as $c => $complex) {	
	$complexObj = new Subject($complex);

	// что-то свое здесь делаю

	$complexes->addComplex($complex->id, $complexObj);
}

В конце пробую вывести вот так
$complexes->showComplexes();
И массив пустой

Но если в цикле поставить вывод $complexObj->var_d(); то все норм, но структура немного странная (по крайней мере для меня)
Subject Object
(
    [id:protected] => SimpleXMLElement Object
        (
            [0] => 1
        )

    [name:protected] => SimpleXMLElement Object
        (
            [0] => ЖК 1
        )
)
Subject Object
(
    [id:protected] => SimpleXMLElement Object
        (
            [0] => 2
        )

    [name:protected] => SimpleXMLElement Object
        (
            [0] => ЖК 2
        )
)
  • Вопрос задан
  • 128 просмотров
Решения вопроса 2
uDenX
@uDenX
PHP Developer
$this->id   = (string) $subject->id[0];
$this->name = (string) $subject->name[0];
Ответ написан
Комментировать
@Imrahil
$complexes->addComplex((int)$complex->id, $complexObj);
А в конструкторе Subject
$this->id = (int)$subject->id;
$this->name = (string)$subject->name;

Почему так?? сделайте var_dump($complex->id) или $complexObj и поймете.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы