На сколько допустимы функции такого вида, или лучше так не делать?: PHP: function send_data($socket, $msg, $len, $retries_count) { if (socket_write($socket, pack("H*",$msg))) { $resp=""; if (socket_recv($socket, $resp, $len, MSG_WAITALL)) { socket_close($socket); return $resp; } else { #####New retry up to 3 $retries_count++; if ($retries_count<4) { send_data($socket,$msg,$len,$retries_count); }; } } }
Ну в данном случае можно было обойтись и без рекурсии, простым циклом. Причём, достаточно очевидным образом.
это понятно, но на самом деле функция чуть длиннее и охватывать всю её циклом -- не удобно читать, на сколько плохо использовать рекурсии и какие могут быть подводые камни?
переполнение стека вызвов, например. Если функция слишком длинная, лучше разбить на несколько. Рекурсию лучше использовать только там, где без неё не обойтись (ну или не обойтись больших усилий, в принципе, считается, что любую рекурсию можно заменить итерацией)