Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Ошибка Catchable fatal error: Object of class Post could not be converted to string
Покинул форум
Сообщений всего: 6
Дата рег-ции: Авг. 2015
Помог: 0 раз(а)
Ребят, приветствую!
Хочу реализовать систему вывода комментариев к постам деревом.
Вот первый кусок кода, находящийся в классе Post, наследующий класс Core. Тут у нас получается рекурсивный алгоритм:
В итоге мне прилетает вот такая ошибка: Catchable fatal error: Object of class Post could not be converted to string in /Applications/MAMP/htdocs/nn/eng ine/classes/core.class.php on line 185
Сначала пробовал написать процедурно, все прекрасно работает. Переделал под ООП и вот такие дела выскакивают. Никогда с таким не сталкивался. Помогите решить проблему.
Viper
Отправлено: 02 Августа, 2015 - 02:40:18
Активный участник
Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007 Откуда: Симферополь
Помог: 98 раз(а)
Судя по обрывкам информации, я так понял, что вы хотите получить данные из наследуемого в родительский класс.
global вам тут не поможет. Только замучаетесь потом дебажить.
$query=$mysqli->query("SELECT `id`, `comment` FROM `comments` WHERE `post_id` = '{$post_id}' AND `id_parent` = 0");
if($query->num_rows> 0){
if($query->num_rows> 0){
while($comment=$mysqli->fetch_assoc($query)){
$id_parent=$comment['id'];
$content.=$comment['comment'].'<br>';
self::getCommentsParentDB($mysqli,$id_parent, 1);
}
}
}else{
$content.='Комментариев нет';
}
return$content;
}
}
После выполнения скрипта мне выдается такая вот ошибка: Parse error: syntax error, unexpected 'getCommentsParentDB' (T_STRING), expecting '(' in /Applications/MAMP/htdocs/nn/eng ine/classes/post.class.php on line 40
Когда процедурным подходом писал, то все нормально выводилось:
$query=$mysqli->query("SELECT `id`, `comment` FROM `comments` WHERE `post_id` = 8 AND `id_parent` = 0");
$content='';
if($query->num_rows> 0){
while($comment=$query->fetch_assoc()){
$id_parent=$comment['id'];
$content.=$comment['comment'].'<br>';
getCommentsParentDB($mysqli,$id_parent, 1);
}
}
function getCommentsParentDB($mysqli,$id_parent,$i= 1){
global$content;
$q[$i]=$mysqli->query("SELECT `id`, `comment` FROM `comments` WHERE `post_id` = 8 AND `id_parent` = '{$id_parent}'");
if($q[$i]->num_rows> 0){
while($q[$i+ 1]=$q[$i]->fetch_assoc()){
$id_parent=$q[$i+1]['id'];
for($j=0;$j<$i;$j++){
$content.=' ';
}
$content.=$q[$i+1]['comment'].'<br>';
getCommentsParentDB($mysqli,$id_parent,$i+ 2);
}
}
}
echo$content;
Мне вот нужно именно все полученные данные заносить в переменную $content, по-другому никак.
Буду ОЧЕНЬ благодарен за помощь!
Viper пишет:
Судя по обрывкам информации, я так понял, что вы хотите получить данные из наследуемого в родительский класс.
global вам тут не поможет. Только замучаетесь потом дебажить.
Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007 Откуда: Симферополь
Помог: 98 раз(а)
Nikita_Barinov пишет:
После выполнения скрипта мне выдается такая вот ошибка: Parse error: syntax error, unexpected 'getCommentsParentDB' (T_STRING), expecting '(' in /Applications/MAMP/htdocs/nn/eng ine/classes/post.class.php on line 40
Открывающую скобку пропустили о чем вам php и сообщил.
А вообще у вас не совсем верно запроектированно.
К примеру у вас есть большой класс для работы с комментариями и вы решили его разделить по выполняемому функционалу. В результате у вас методы дочерних классов должны возвращать готовый для дальнейшей работы результат. А в методах дочерних классов вы спокойно можете обращаться к переменный родительского класса. Что вы собственно и делаете через $this->content.
Покинул форум
Сообщений всего: 6
Дата рег-ции: Авг. 2015
Помог: 0 раз(а)
Viper пишет:
Nikita_Barinov пишет:
После выполнения скрипта мне выдается такая вот ошибка: Parse error: syntax error, unexpected 'getCommentsParentDB' (T_STRING), expecting '(' in /Applications/MAMP/htdocs/nn/eng ine/classes/post.class.php on line 40
Открывающую скобку пропустили о чем вам php и сообщил.
А вообще у вас не совсем верно запроектированно.
К примеру у вас есть большой класс для работы с комментариями и вы решили его разделить по выполняемому функционалу. В результате у вас методы дочерних классов должны возвращать готовый для дальнейшей работы результат. А в методах дочерних классов вы спокойно можете обращаться к переменный родительского класса. Что вы собственно и делаете через $this->content.
Покинул форум
Сообщений всего: 6
Дата рег-ции: Авг. 2015
Помог: 0 раз(а)
Viper пишет:
Nikita_Barinov пишет:
Почему так, непонятно
смотрите запросы которые отправляете mysql. Может в логике ошиблись.
Все, нашел ошибку! Дело не в запросах MySQL было. Нужно было в статистическом методе сохранять полученные данные не в отдельную переменную $cont, а напрямую в self::$content. Теперь все, как надо! Спасибо за то, что натолкнули на статистические свойства и методы!
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.