Если вы вызовете обе функции, то каждая из них выведет массив JSON.Это приведет к ответу HTTP со следующим содержанием:
{"like":1}{"count":2}
Оба массива будут действительны отдельно.Но если конкатенация подобна этой, она больше не является допустимым JSON.
Вместо вывода сериализации json с echo
вы должны собрать его во временную переменную, объединить два массива, а затем вывести объединенный массив сsingle:
echo json_encode(array_merge($countArray, $likeArray));
Примером адаптации вашего кода
Функция B должна стать такой:
public function countLikes($i) {
//sql query
try
{
$query = $this->_db->prepare($sql);
$params = array(':imageid' => $i);
$query->execute($params);
if ($query->rowCount() > 0) {
$count = $query->fetchColumn();
/* JUST RETURN HERE */
return (array('count' => $count));
}
}
catch(PDOException $ex)
{
/* INSTEAD OF FALSE use an empty array,
which is interpreted as false in boolean context*/
return array();
}
}
Тогда при вызове функции:
//calling function B
$countArray = $this->countLikes($imageid);
Это всегда будет массив.Который вы затем можете использовать в выходном коде:
$response = json_encode(array('like' => true) + $countArray);
(Все еще нецелесообразно иметь echo
прямо там. Но слишком много кода, слишком мало контекста, чтобы предложить более приятное переписывание. И если это работает, ..)