Pull to refresh

Comments 12

А чем плох мой велосипед?
Свой велосипед всегда приятнее, область применения немного другая. В своих задачах я ограничиваюсь лишь простыми запросами к REST сервисам.
ну, php 5.5 же на дворе уже давно.
зачем городить глобальные HttpRequest, HttpRequestException, HttpURLConnection? Не говоря уже про SocketInterface.
Дело в том, что проект в котором используется эта библиотека должен работать с PHP 5.2
Печально, что сказать.
Он, как бы, очень устарел.
За прогрессом трудно угнаться, особенно если проект берет свое начало в 2003 году и им пользуется ~3000 человек, на разных хостинговых площадках.
1. У вас в коде перемешаны русскоязычные англоязычные описания:

    /**
* Get status message of the response
*
* @return string message
*/
    public function message()
    {
return $this->getConnection()->getResponseMessage();
    }

    /**
* Добавляет параметры из объекта/массива $params к основному URL
*
* @param string $url
* @param array|object $params
* @return string
*/
    private function append($url, $params)
    {
return $url.(strpos($url, '?') === false ? '?' : '&').http_build_query($params);
    }

Логично их иметь на одном языке и предпочтительно английском.

То же самое относится и к исключениям:

	throw new HttpRequestException('Это не ссылка на файл');


2. Не стоит пихать несколько интерфейсов и классов в один файл. Лучше грузить их через autoloader или включать в заголовке. По этой же причине мне не нравится эта функция:

public static function create($url)
    {
$basepath = dirname(__FILE__).DIRECTORY_SEPARATOR.'implements'.DIRECTORY_SEPARATOR;

// предпочтение отдается библиотеке CURL
if (extension_loaded('curl') && file_exists($basepath.'CURL.php'))
{
require_once $basepath.'CURL.php';
return new CURLInterface($url);
}

if (function_exists('fsockopen') && file_exists($basepath.'Socket.php'))
{
require_once $basepath.'Socket.php';
return new SocketInterface($url);
}
    }

Вроде и все правильно, но есть ощущение хардкода

3. Класс Socket

	if(is_resource($this->socket)) // при повторном обращении если follow_redirects
fclose($this->socket);


Есть ощущение, что в большинстве случаев это не оптимальный выход. При редиректах внутри домена (как это чаще всего бывает) сокет закрывать незачем, это потеря времени и ресурсов.
Спасибо за дельные замечания, обещаю перевести все комментарии.

По поводу 2 пункта, хотелось что бы файлов было как можно меньше для простоты использования, по поводу хардкода существует метод setConnectionFactory, который позволяет определять собственные реализации.

Если бы в PHP можно было использовать вложенные классы, код выглядел бы на порядок эстетичней.
При работе с курлом у вас закрывается дескриптор на каждый запрос?
Дескриптор закрывается, когда уничтожается экземпляр класса.
Я читал здесь статью по поводу открытых дескрипторов и заголовка keep-alive, но лично я придерживаюсь мнения, что "PHP создан, чтобы умирать".
Sign up to leave a comment.

Articles