@artem14394609

Что не так с кодом?

Добрый день! Серфил гугл в поиске задачек по php, нашел вот такую. Что здесь не так с кодом, как его можно переделать?
Как я вижу, метод init можно удалить, так как мы проверяем на ошибку в сразу в методе translate_text. Я новичок в php
<?php
class Translation
{
	const DETECT_YA_URL = 'https://translate.yandex.net/api/v1.5/tr.json/detect';

	const TRANSLATE_YA_URL = 'https://translate.yandex.net/api/v1.5/tr.json/translate';

	public $key = 'AIza1ycf2zgk-nRxdbb4gg49M9';

	public function init()
	{
		parent::init();

		if (empty($this->key)) {
			throw new InvalidConfigException("Error Processing Request");
			
		}
	}

	public static function translate_text($format='text')
	{
		if (empty($this->key)) {
			throw new InvalidConfigException("Error Processing Request");
		}

		$value = array(
			'key' => $this->key,
			'text' => $_GET['text'],
			'lang' => $_GET['lang'],
			'format' => $format == 'text' ? 'plain' : $format,
		);

		$formData = http_build_query($value);

		$ch = curl_init(self::TRANSLATE_YA_URL);
		curl_setopt($ch, CURLOP_RETURNTRANSFER, true);
		curl_setopt($ch, CURLOP_POSTFIELDS, $formData);

		$json = curl_exec($ch);
		curl_close($ch);

		$data =json_decode($json, true);
		if ($data['code'] == 200) {
				return $data['text'];
			}
			return $data;	
	}
}
  • Вопрос задан
  • 141 просмотр
Пригласить эксперта
Ответы на вопрос 1
Immortal_pony
@Immortal_pony Куратор тега PHP
Выкинуть init()
Сделать __contstruct. В нём принимать key
Выкинуть проверки ключа из кода
Не использовать underscore в названиях функций (вкусовщина, но PSR)
Функцию перевода сделать не статической.
В функции перевода никаких данных из $_GET не вытаскивать. Все параметры только принимать. Если нужно что-то из $_GET, то делать это вне этого класса, не забыв санитайзинг и валидацию
Не использовать устаревший синтаксис array()
Обязательно выставлять таймаут на ответ внешнего сервиса
Обрабатывать ошибки если они произошли во время запроса (если сервер вернул 404, например. Или если он не ответил в таймаут)
json_decode вызывать только с флагом JSON_THROW_ON_ERROR или явно проверять что json распарсился корректно
Код ответа вытаскивать не из json'а, конечно.
Валидировать корректность полученных данных перед возвратом (убедиться что все ожидаемые поля на месте и значения в пределах допустимых)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы