What I do and it works very well, is that I register plugins, callbacks in the application configuration:
$cfg = ['plugins_for_foo' => ['callback_one', 'callback_two',
[$Obj, 'three']]];
Then in the code I get my configuration like this: $callbacks = Conf::get('plugins_for_foo', array());
And I can iterate over them and activate them. It is fast, flexible, you can easily test the callbacks in your unit tests, etc. Note that this is the standard approach to load components with Django.