Как сделан cURL?

Тема в разделе "Как сделать...", создана пользователем HatoL, 15 май 2012.

  1. HatoL

    HatoL

    Регистр.:
    5 фев 2008
    Сообщения:
    206
    Симпатии:
    36
    Нет, вопрос не в реализации функций :D Заметьте, что cURL не является объектно-ориентированным приложением, следовательно все промежуточные данные в нем не запихнуты в классе. Те же опции (константы CURL_OPT_URL и прочее), ведь это хранится в каких-то переменных.

    Дело в том, что это есть то же самое ООП, только без наследования. Неужели используются какие-то глобальные переменные? Как грамотно самому построить такое приложение? Например в случаях, когда я применяю ООП, но без наследования (то есть есть данные и методы для их обработки, плюс промежуточные данные и все).
     
  2. CheburatoR-all

    CheburatoR-all Гипножаба

    Регистр.:
    26 апр 2009
    Сообщения:
    295
    Симпатии:
    438
    Curl -- это внешняя библиотека (libcurl). Набор функций (http://php.net/manual/ru/book.curl.php) в php предоставляет поддержку этой библиотеки в php.
    Автору топика стоит немного подробней изучить парадигму "ООП" и понять для чего она требуется.
    Сам curl написан на "Си" без применения ООП, который в сях не поддерживается.
     
  3. dexgun

    dexgun Постоялец

    Заблокирован
    Регистр.:
    26 сен 2010
    Сообщения:
    63
    Симпатии:
    19
    По сути курл лишь упрошает составление запроса хедера, нового он ничего не несёт.
     
  4. HatoL

    HatoL

    Регистр.:
    5 фев 2008
    Сообщения:
    206
    Симпатии:
    36
    Да я все понимаю. Я просто интересуюсь, например если я буду делать скрипт с таким же интерфейсом (имею ввиду взаимодействие с программистом), то как следует хранить все промежуточные данные? Просто как глобальные переменные?
     
  5. CheburatoR-all

    CheburatoR-all Гипножаба

    Регистр.:
    26 апр 2009
    Сообщения:
    295
    Симпатии:
    438
    Нет, использовать глобальные переменные в функциях -- плохая практика. Если речь идет о функциональном программировании, просто возвращайте нужные данные
     
  6. PapaJoe

    PapaJoe

    Регистр.:
    4 авг 2008
    Сообщения:
    620
    Симпатии:
    311
    Так вы собираетесь писать скрипт на php, т.е. обертку над сокетами для предоставления функционала как у cURL или будете делать отдельный подключаемый бинарный модуль?
     
  7. PHPCod3r

    PHPCod3r

    Регистр.:
    7 июн 2010
    Сообщения:
    261
    Симпатии:
    25
    Сложно понять что хочет автор на самом деле, вот тут подробно обьяснено что такое курл
    http://curl.haxx.se/
    имхо если хочется сделать что то похожее лучше сначало изучить.
     
  8. chang

    chang

    Регистр.:
    20 ноя 2009
    Сообщения:
    364
    Симпатии:
    117
    все константы храняться в глобальной области видимости ( аналог пхп define( ...) )
    первая ф-ция $ch = curl_init(); инициализирует сеанс курла
    собстно этот самый $ch и указывает на какой-то участок памяти где и хранятся все необходимые данные ( временные и постоянные )

    дальше при вызове курловских ф-ций первым аргументом передаем этот самый $ch

    curl_setopt($ch, ...)
    curl_exec($ch);
    curl_close($ch);

    собсно по нему курл и понимает "с какого места продолжить работу"

    т.е. курсл-библиотека таким образом не засоряет глобальную область
    елинственное что туда попадает это сами ф-ции и константы
    ну и потом еще этот самый $ch который програмист уже сам как-бы создает

    собсно и все
     
  9. HatoL

    HatoL

    Регистр.:
    5 фев 2008
    Сообщения:
    206
    Симпатии:
    36
    Хммм, а вот про $ch я честно говоря забыл.

    P. S. а вот можно ли создать тоже тип переменной Resource? Или только создать какую-то левую переменную и всегда передавать ее по ссылке в функции?
     
  10. chang

    chang

    Регистр.:
    20 ноя 2009
    Сообщения:
    364
    Симпатии:
    117
    тип переменной Resource создать явно можно, но почему-то мне кажется что лишь через си-модуль/библиотеку ( хотя точно сказать не могу.. не сталкивался с этим)
    но я так предполагаю, что вы будите подобную реализацию делать на чистом пхп, а в таком случае имхо нет никакой разницы какой тип будет у переменной $ch ... - это лишь "хранилище данных"
    это например может быть и object и array - наверно как самые "вместительные" (данных много разных можно затолкать в них) типы пхп