API PHP Ответы ReviewResponse Описание ReviewResponse
- это специализированный класс ответа для работы с отзывами на фильмы от Kinopoisk API. Наследует функциональность PaginatedResponse
и добавляет специфичные поля для статистики отзывов по типам (положительные, отрицательные, нейтральные).
Основные возможности Наследование функциональности пагинации от PaginatedResponse
Хранение статистики отзывов по типам Создание объекта из данных API с валидацией Преобразование в массив для сериализации Поддержка всех методов пагинации Наследование PHP NotKinopoisk\Responses\PaginatedResponse
└── NotKinopoisk\Responses\ReviewResponse
Конструктор PHP public function __construct(
int $total,
array $items,
int $currentPage,
int $totalPages,
public int $totalPositiveReviews,
public int $totalNegativeReviews,
public int $totalNeutralReviews
)
Параметры $total
(int) - Общее количество отзывов $items
(array) - Массив отзывов текущей страницы $currentPage
(int) - Номер текущей страницы $totalPages
(int) - Общее количество страниц $totalPositiveReviews
(int) - Общее количество положительных отзывов $totalNegativeReviews
(int) - Общее количество отрицательных отзывов $totalNeutralReviews
(int) - Общее количество нейтральных отзывов Свойства totalPositiveReviews PHP public int $totalPositiveReviews
Общее количество положительных отзывов на фильм.
totalNegativeReviews PHP public int $totalNegativeReviews
Общее количество отрицательных отзывов на фильм.
totalNeutralReviews PHP public int $totalNeutralReviews
Общее количество нейтральных отзывов на фильм.
Статические методы fromArray() PHP public static function fromArray(array $data, string $cls): self
Создает экземпляр ReviewResponse
из массива данных API.
Параметры $data
(array) - Массив данных от API, содержащий информацию об отзывах $cls
(string) - Имя класса для элементов коллекции (обычно Review::class
) Возвращает ReviewResponse
- Новый экземпляр с данными об отзывах Исключения KpValidationException
- Если данные имеют некорректную структуру Пример использования PHP $apiData = [
'total' => 150,
'items' => [...],
'current_page' => 1,
'total_pages' => 5,
'totalPositiveReviews' => 100,
'totalNegativeReviews' => 30,
'totalNeutralReviews' => 20
];
$reviewResponse = ReviewResponse::fromArray($apiData, Review::class);
Методы экземпляра toArray() PHP public function toArray(): array
Преобразует объект в массив.
Возвращает array
- Массив с данными об отзывах и статистикой Пример использования PHP $response = ReviewResponse::fromArray($apiData, Review::class);
$array = $response->toArray();
Наследованные методы ReviewResponse
наследует все методы от PaginatedResponse
:
getNextPage()
- Получение номера следующей страницы hasNextPage()
- Проверка наличия следующей страницы getPreviousPage()
- Получение номера предыдущей страницы hasPreviousPage()
- Проверка наличия предыдущей страницы getFirstPage()
- Получение номера первой страницы getLastPage()
- Получение номера последней страницы isFirstPage()
- Проверка, является ли текущая страница первой isLastPage()
- Проверка, является ли текущая страница последней getPaginationInfo()
- Получение информации о пагинации Типы отзывов Класс поддерживает следующие типы отзывов:
Положительные - Отзывы с положительной оценкой Отрицательные - Отзывы с отрицательной оценкой Нейтральные - Отзывы с нейтральной оценкой Статистика отзывов Класс предоставляет доступ к статистике отзывов:
PHP // Получение статистики
$positiveCount = $reviewResponse->totalPositiveReviews;
$negativeCount = $reviewResponse->totalNegativeReviews;
$neutralCount = $reviewResponse->totalNeutralReviews;
// Вычисление общего количества
$totalReviews = $positiveCount + $negativeCount + $neutralCount;
// Вычисление процентов
$positivePercent = ($positiveCount / $totalReviews) * 100;
$negativePercent = ($negativeCount / $totalReviews) * 100;
$neutralPercent = ($neutralCount / $totalReviews) * 100;
Обработка ошибок Класс включает обработку ошибок:
Валидация структуры данных API Проверка типизации элементов Обработка некорректных данных отзывов Валидация параметров пагинации Пример полного использования PHP use NotKinopoisk\Responses\ReviewResponse;
use NotKinopoisk\Models\Review;
// Получение данных от API
$apiData = [
'total' => 150,
'items' => [
[
'reviewId' => 1,
'reviewType' => 'POSITIVE',
'reviewText' => 'Отличный фильм!'
],
[
'reviewId' => 2,
'reviewType' => 'NEGATIVE',
'reviewText' => 'Не понравилось'
]
],
'current_page' => 1,
'total_pages' => 5,
'totalPositiveReviews' => 100,
'totalNegativeReviews' => 30,
'totalNeutralReviews' => 20
];
// Создание объекта ответа
$reviewResponse = ReviewResponse::fromArray($apiData, Review::class);
// Анализ статистики отзывов
$positiveCount = $reviewResponse->totalPositiveReviews;
$negativeCount = $reviewResponse->totalNegativeReviews;
$neutralCount = $reviewResponse->totalNeutralReviews;
$totalReviews = $positiveCount + $negativeCount + $neutralCount;
echo "Статистика отзывов:\n";
echo "- Положительных: {$positiveCount} (" . round(($positiveCount / $totalReviews) * 100, 1) . "%)\n";
echo "- Отрицательных: {$negativeCount} (" . round(($negativeCount / $totalReviews) * 100, 1) . "%)\n";
echo "- Нейтральных: {$neutralCount} (" . round(($neutralCount / $totalReviews) * 100, 1) . "%)\n";
echo "- Всего: {$totalReviews}\n";
// Работа с пагинацией
echo "\nПагинация:\n";
echo "- Текущая страница: {$reviewResponse->currentPage}\n";
echo "- Всего страниц: {$reviewResponse->totalPages}\n";
echo "- Отзывов на странице: " . count($reviewResponse->items) . "\n";
if ($reviewResponse->hasNextPage()) {
echo "- Следующая страница: {$reviewResponse->getNextPage()}\n";
}
if ($reviewResponse->hasPreviousPage()) {
echo "- Предыдущая страница: {$reviewResponse->getPreviousPage()}\n";
}
// Обработка отзывов
echo "\nОтзывы на текущей странице:\n";
foreach ($reviewResponse->items as $review) {
echo "- [{$review->reviewType}] {$review->reviewText}\n";
}
// Преобразование в массив
$array = $reviewResponse->toArray();
Связанные классы PaginatedResponse
- Базовый класс для пагинированных ответов Review
- Модель отзыва на фильм KpValidationException
- Исключение для ошибок валидации DefaultResponse
- Базовый класс для всех ответов API 25 июля 2025 г. 19:29:41 25 июля 2025 г. 13:46:37