Theme function VS template file in Drupal 7
Drupal offers a variety of ways to implement solutions when it comes to custom theming and it has been abused often due to the very same reason. Choosing the right way is what Drupal developers find tricky. If it is not done right, it is quite likely that you 'Awesome Drupal Website' would turn into a code-monster soon. This can even make maintenance difficult. Hope this 'tiny bit of' information could help you through it.
Which one to select, theme function or template? Let us have a close look at both.
Theme function: A theme function passes data to a PHP function and wrap it in markup. It could be difficult to read and modify theme functions. However, theme function runs faster than template.
Template (.tpl file): A template file passes data to a separate .tpl file. It should not be containing too much logic. So it is usually easier to make changes. Also, we can make use of preprocess function to prepare necessary variables and pass them to the template file.
If your output contains a lot of markup with customizations in the layout, we would recommend to use a template file. Use hook_preprocess_hook() functions in either your theme or custom module to accommodate changes to the variables in order to avoid duplicate templates. Otherwise, you would be in a very sorry situation in case, you need to change the page markup site-wide.
Please feel free to share your thoughts and doubts regarding this here.
Note: Drupal 7 will reach the end of life in November 2022. If you are still using Drupal 7, it is better to migrate to the latest version of Drupal. Please contact us if you need any support in migrating your existing website to the latest version of Drupal.