LINUX.ORG.RU

Рекурсивная функция


0

1

Всем привет.

Что то я первый раз с такой проблемой столкнулся, и не могу понять проблему. Есть следующий код:

$jsonData = file_get_contents('general.json');

$jsonData  = json_decode($jsonData );

//print_r($jsonData);

parse_page($jsonData);

function parse_page($node){

	if(is_object($node)):
		foreach($node as $elements):
			if(is_object($elements->children)){
				parse_page($elements->children);
			}

		endforeach;
	endif;
}

т.е. функция сама себя вызывает рекурсивно.

Но получаю такую ошибку:

Notice: Undefined property: stdClass::$children in /opt/lampp/htdocs/b2c/toWpContent/index.php on line 21

На это линии стоит проверка:

if(is_object($elements->children)){
Но не в проверке дело, если убрать вызов функции самой себя, то ошибка исчезает, не пойму что ему не нравится?

можно записать так @parse_page($elements->children);

и всё будет хорошо, но я не считаю что это решение проблемы



Последнее исправление: spiritkhl (всего исправлений: 1)

рекурсивность тут не при чем. проблема в том, что у $elements нету «children», о чем тебе нотифай и говорит.

//p.s. крутая ава.

anonymous
()
Ответ на: комментарий от anonymous

Дак вот ошибку я понимаю, но если сделать допустим в этом месте

print_r($elements->children);

то выведется то что надо.

Да и проверку спокойно проходит

spiritkhl
() автор топика
Ответ на: комментарий от spiritkhl

В каком конкретно месте ты делаешь print_r? Ты уверен (т.е. абсолютно на 146%) в том, что именно в этом месте ты смотришь распечатку print_r? Или «один раз вывело - значит нормалёк»?

Выше кэп как бы намекнул, что надо еще по стеку вызовов вытягивать тот самый $elements на котором рушится.

GateKeeper ★★
()

а если свойства вообще нет?

if(property_exists($elements, 'children') && is_object($elements->children)) {
	parse_page($elements->children);
}

RR
()
Ответ на: комментарий от anonymous

Как и в случае с содомитами, пока ребенок не вырастет, не поймешь станет он пхпешником или нет.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.