Задать вопрос
sorry_i_noob
@sorry_i_noob

Php при добавлении в массив элемента типа Model добавляется 1, а при добавлении конкретного поля модели — нормально значение. Почему так?

Здравствуйте. Есть вот такой код:
class Model_Catalog extends ORM {
private function func2($category_id, $result_array) {
		$children = ORM::factory('Catalog')->where('catalog_id', '=', $category_id)->find_all()->as_array();
		if (count($children) > 0) {
			foreach ($children as $c) {
				$result_array[] += $c;
				$result_array += $this->func2($c->id, $result_array);
			}
		}
		return $result_array;
}
public function func1() {
		$all_elements = $this->func2($this->id, array());
		return $all_elements;
	}
}

Почему вот эта строка: $result_array[] += $c; добавляет в $result_array единицу? А если написать вот так: $result_array[] += $c->id;, то добавит id экземпляра модели Catalog. И если я перед $result_array[] += $c; напишу вот так: $test_value = $c;, то в test_value будет экземпляр модели. Так почему же в массив добавляется единица вместо экземпляра модели? Как мне это исправить?
  • Вопрос задан
  • 72 просмотра
Подписаться 1 Простой 3 комментария
Решения вопроса 1
@sitalya
Правильно вам говорят...
Написанное вами:
$result_array[] += $c;
Означает:
$new_item = $new_item + $c;
//преобразуется в
//$new_item = NULL + object
//арифметическое сложение преобразует в
//$new_item = 0 + 1
//итог
//$new_item = 1;
$result_array[] = $new_item;

Когда вам нужно:
$result_array[] = $c;
Почитайте об операторе присваивания и про преобразования типов
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы