Возвращаемое значение рекурсивной функции PHP

Я написал рекурсивную функцию в PHP для обрезания текста. Обрезанный текст будет … прикреплен к концу. Необработанный текст будет возвращен в исходном состоянии.

Он работает, если текст соответствует максимальной ширине. Однако, если он не соответствует заданной ширине, функция не вернет значение, но должно. Кажется, что весь оператор возврата игнорируется. Если я заменил возврат эхом, он отобразит правильное значение.

Ожидаемый результат:
-TEST ZIN
-TEST ZI
-TEST Z
-КОНТРОЛЬНАЯ РАБОТА
-TES
-TE … (здесь ничего не возвращается, так что это никогда не будет показано)

function check_length($str, $max, $size = SIZE, $rec = false) { echo "FUNCTION $str "; list($left, , $right) = imageftbbox($size, 0, FONTURL, $str); if($rec == false) { if(($right - $left) > $max) { echo 'if 1<br />'; check_length(substr($str, 0, -1), $max, $size, true); } else { echo 'else 1<br />'; return $str; } } else { if(($right - $left) > ($max - 9)) { echo 'if 2<br />'; check_length(substr($str, 0, -1), $max, $size, true); } else { echo 'else 2<br />'; return "$str..."; } } } echo check_length('TEST ZIN', 30); 

ПРИМЕЧАНИЕ: эхо в функции предназначено для отладки.

Заранее спасибо.

Вы не возвращаете текст должным образом, например

  } else { echo 'else 1<br />'; return $str; <---nothing in the 'parent' caller catches this, so it's lost } 

В любом месте, где вы выполняете рекурсию, и вам нужно вернуть значение, вы должны захватить / вернуть рекурсивный вызов:

  return check_length(substr($str, 0, -1), $max, $size, true); 

или

  $newstr = check_length(...); return $newstr; 

Вернуть результат вызова рекурсивной функции;)

 return check_length(substr($str, 0, -1), $max, $size, true);