What way should I use to load a file from a module? What way should I use to load a file from a module?

I am writing a module which is divided into 3 parts 


Custom core will be in the module which contains basic functions required for project
Custom notification section will handle the notifications to show on site (It has a section on site where user can see all notifications.)
Custom mail will handle mail (Users will get email on each activity.)


So I have now a module file and 2 include files, but I am confused on how to include them in .module file.

There are 3 different methods available, but I am not sure which one is best and what the major differences between them are.


require_once drupal_get_path('module', 'custom_module')
files[] = mail.inc
module_load_include('inc', 'custom_module', 'mail.inc')


I tried them, and they all are working fine for now; I don't have much experience to guess future issues.
module_load_include() is a wrapper around require_once, with some sugar, so those are essentially equivalent. In the Drupal world, it would make sense to use the Drupal-specific function.

The files[] directive is for class autoloading - you don't use it to include files as such, just to make classes in those files available automatically when you need them.

You shouldn't use module_load_include() at the top of a module (or any other) file, it should be used only after Drupal has been bootstrapped. From the docs:


  Do not use this function in a global context since it requires Drupal to be fully bootstrapped, use require_once DRUPAL_ROOT . '/path/file' instead.