Как сделан 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). Набор функций (Перейти по ссылке) в 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
    Симпатии:
    312
    Так вы собираетесь писать скрипт на php, т.е. обертку над сокетами для предоставления функционала как у cURL или будете делать отдельный подключаемый бинарный модуль?
     
  7. PHPCod3r

    PHPCod3r

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

    chang

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