[development] module_exists vs. functions_exists?

Juan Rodriguez juan.fco.rodriguez at gmail.com
Wed Jun 25 12:03:03 UTC 2008

On Wed, Jun 25, 2008 at 1:02 AM, Chris Johnson <cxjohnson at gmail.com> wrote:
> module_invoke() is used to call core API functions in a special core API
> class called hooks.  If your function is not part of the core API, then
> using module_invoke to call it is misleading.  Misleading code is a
> maintenance problem.  Some day, the functionality of module_invoke() may
> change and not work correctly to call random contributed module functions.
> It will always work to call hooks, however.  Hence, by definition, it is
> wrong to use it for a purpose it was not meant.
> On Tue, Jun 24, 2008 at 2:31 PM, Michael Prasuhn <mike at mikeyp.net> wrote:
>> On Jun 24, 2008, at 11:32 AM, Damien wrote:
>>> On Tue, Jun 24, 2008 at 7:50 PM, Michael Prasuhn <mike at mikeyp.net> wrote,
>>> about module_invoke(): I don't buy it. This looks like an excellent use of
>>> an existing function that does exactly what is called for. What defines a
>>> 'hook' anyway? Is a function not a hook if only one module implements it?
>>> Would it be such a stretch to think of every function as a hook to be
>>> invoked in multiple different ways?
>>> It doesn't make sense to use module_invoke() in the stated case (calling
>>> a specific API function of a module). module_invoke() does not do any error
>>> checking, and it does not report anything useful. You should call
>>> drupal_functon_exists() directly and act accordingly in case of errors.
>>> Using module_invoke() here would be bad practice at best, but could also
>>> be dangerous.
>> Once again, I don't buy it. If you have to switch off of whether the
>> function exists, then by all means do that. But for Drupal 6 development I
>> see no issue with using module_invoke. If you can't be bothered to test your
>> code to make sure what it depends on is there, then your code has deeper
>> issues than the method used to interface with another API.
>> -Mike

I agree with Chris johnson,

I would say even more, I would propose a modification to module_invoke
to not allow calling
API functions other than hooks :)

More information about the development mailing list