I usually use the following pattern: if (module_exists('module_name')) { $foo = module_invoke('module_name', 'api_function', $bar); } ----- Original Message ----- From: "Greg Knaddison - GVS" <Greg@GrowingVentureSolutions.com> To: development@drupal.org Sent: Sunday, June 22, 2008 5:36:46 PM GMT -05:00 US/Canada Eastern Subject: [development] module_exists vs. functions_exists? Hi, In building some contrib modules that interact with other modules I often find myself writing something like: if (module_exists('module_name')) { $foo = module_name_api_function($bar); } This seems to be pretty common across core and contrib. I'd even call it standard. Another option would be: if (function_exists('module_name_api_function')) { $foo = module_name_api_function($bar); } The benefit of the second format is that if/when module_name's maintainer decides to rewrite module_name and change all their functions then my module may simply stop interacting with it rather than failing on a function not found error. The benefit of the first format is that it fails quickly and is likely to generate a bug report with a very clear solution. Thoughts? Thanks, Greg -- Greg Knaddison Denver, CO | http://knaddison.com | 303-800-5623 Growing Venture Solutions, LLC | http://growingventuresolutions.com