Comments

Unfortunately this function and module_invoke() do not allow passing variables by reference.

To work around this, you can do something like this:

<?php
foreach (module_implements('my_hook') as $module) {
 
$function = $module . '_my_hook';
 
$function($var1, $var2);
}
?>

And, make sure to have the ampersand in the hook declaration:

<?php
function my_module_my_hook(&$var1, &$var2) {
 
$var1 = 'do';
 
$var2 = 'stuff';
}
?>

If you want to pass things by reference, it's likely that you want to do

<?php
$modified_data
= drupal_alter('my_type', $data);
?>

instead.
http://api.drupal.org/api/drupal/includes!module.inc/function/drupal_alt...

There is an exception to passing by reference. If the arguments for the hook are Objects, then they are passed by reference. This is default behaviour of php:

http://php.net/manual/en/language.oop5.references.php .

An example of this in action is with the feeds hook hook_feeds_after_parse()

http://drupalcontrib.org/api/drupal/contributions!feeds!feeds.api.php/fu...

The hook is called using module_invoke_all, but you can, for example, remove all the

$results->items

and the feeds import won't do anything.