Какой из вариантов лучше и почему?

12 3
Слава Шевцов
На сайте с 23.07.2005
Offline
370
1156

Есть две функции работы с Курлом. Взяты из боевых скриптов. В обеих идут проверки инициализации. Функции разные, но суть одинаковая - нужно инициировать Курл. Автор у них один. Какой вариант лучше с точки зрения синтаксиса, удобства чтения, поддержки, отлова ошибок и почему?

	function my_download($url,$post){


$ret = false;

if( function_exists('curl_init') ){
if( $curl = curl_init() ){

if( !curl_setopt($curl,CURLOPT_URL,$url) ) return $ret;
if( !curl_setopt($curl,CURLOPT_RETURNTRANSFER,true) ) return $ret;
if( !curl_setopt($curl,CURLOPT_CONNECTTIMEOUT,30) ) return $ret;
if( !curl_setopt($curl,CURLOPT_USERAGENT,'yandex-positions (http://www.samborsky.com/yandex-positions/)') ) return $ret;
if( !curl_setopt($curl,CURLOPT_HEADER,false) ) return $ret;
if( !curl_setopt($curl,CURLOPT_POST,true) ) return $ret;
if( !curl_setopt($curl,CURLOPT_POSTFIELDS,$post) ) return $ret;
if( !curl_setopt($curl,CURLOPT_ENCODING,"gzip,deflate") ) return $ret;

$ret = curl_exec($curl);

curl_close($curl);
}
}

}

function get_download($url){


$ret = false;

if( $curl = curl_init() ){

if( curl_setopt($curl,CURLOPT_URL,$url) ){
if( curl_setopt($curl,CURLOPT_RETURNTRANSFER,true) ){
if( curl_setopt($curl,CURLOPT_CONNECTTIMEOUT,60) ){
if( curl_setopt($curl,CURLOPT_HEADER,false) ){
if( curl_setopt($curl,CURLOPT_ENCODING,"gzip,deflate") ){
if( curl_setopt($curl,CURLOPT_FOLLOWLOCATION,true) ){
$ret = curl_exec($curl);
}
}
}
}
}
}

curl_close($curl);
}

return $ret;
}
Неизменность точки зрения неизменно порождает иллюзию понимания.
wdsg
На сайте с 09.02.2009
Offline
31
#1

Ого! С точки зрения исполнения, оба варианта идентичны. В обоих случаях, при возврате false одним из выражений, дальнейшее выполнение алгоритма будет прекращено. В обоих случаях, при возвратах true, будет выполнено одинаковое количество сравнений. Мне больше нравится второй вариант (ну люблю я пирамидки). Сам ни за что бы не стал делать такую штуку. Проверил бы $curl = curl_init() и выполнил все curl_setopt(...).

Проектирование и разработка сложных IT-систем. Вожусь с проблемными задачами.
dkameleon
На сайте с 09.12.2005
Offline
386
#2

Первый. Не нужно скобки считать.

А для отлова ошибок можно всё через set_error_handler перенаправить куда надо. так даже удобнее будет.

Дизайн интерьера (http://balabukha.com/)
Dreammaker
На сайте с 20.04.2006
Offline
570
#3

Мне больше нравится первый вариант, ибо куча вложенностей во втором - имхо, то не здраво.

Апокалипсис
На сайте с 02.11.2008
Offline
391
#4

Оба - говнокод:) dkameleon прав.

Записки нищего (http://zapiskinishego.ru) - мой личный блог Услуги php программиста. Очень нужна любая работа. Не покупают? Поведенческий аудит интернет-магазина за 5000 руб. (/ru/forum/990312)
Слава Шевцов
На сайте с 23.07.2005
Offline
370
#5
wdsg:
С точки зрения исполнения, оба варианта идентичны.

Строго говоря, это не так. Второй код более корректно отрабатывает ошибку инициализации. Но интересен именно синтаксис. Дейкстра предпочёл бы второй вариант. Я лично предпочитаю первый - в экран лучше вмещается. Но хотел бы услышать мнения гуру программирования.

xzorro
На сайте с 20.04.2009
Offline
7
#6

Параноидальные проверки на установку параметров- лишние.

Выглядит- первый вариант

п.с.

если установить CURLOPT_HEADER и запихнуть туда массив то код короче становится и наглядней

Апокалипсис
На сайте с 02.11.2008
Offline
391
#7

И вообще проверки ни к чему:

http://ru.php.net/manual/en/function.curl-exec.php Читаем:

Returns TRUE on success or FALSE on failure. However, if the CURLOPT_RETURNTRANSFER option is set, it will return the result on success, FALSE on failure.
Слава Шевцов
На сайте с 23.07.2005
Offline
370
#8
xzorro:
Параноидальные проверки на установку параметров- лишние.

Не лишние. Именно эти проверки отличают профи от школьника.

Апокалипсис
На сайте с 02.11.2008
Offline
391
#9
Слава Шевцов:
Не лишние. Именно эти проверки отличают профи от школьника.

Как раз наоборот:) См мой пост из мануала. Если что то не получится curl_exec итак вернет ложь.:) RTFM вообщем.

HraKK
На сайте с 02.03.2009
Offline
128
#10

Апокалипсис, дело говорит.

я гарант (/ru/forum/493343) уже не оказываю данные услуги, извините.
12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий