[wp-hackers] Passing class methods by reference

Mike Schinkel mikeschinkel at newclarity.net
Thu Aug 5 18:51:46 UTC 2010


On Aug 5, 2010, at 2:16 PM, scribu wrote:
> Might want to read this:
> 
> http://stackoverflow.com/questions/1261764/wordpress-need-help-with-remove-action/1268992#1268992

Thanks!  I see you answered it (and I just voted it up.)  Good job. :)

> This is generally why I always assign instantiations to a variable in my
> plugins (versus simply calling `new myclass;`), that way I'm playing nice
> with others and allowing another plugin to modify the callbacks I attach. I
> believe I mention this as good practice in <
> http://www.andrewnacin.com/2010/05/11/in-wordpress-prefix-everything/>.


Thanks.  So if a plugin did not create an instance then it's pretty much not possible to remove the hooks they add, correct?

Okay, so here comes another question tangentially related question.  I see a lot of people using classes for plugins and initializing them as plugins but try as I might I can't see the benefit of doing that over using static class methods. So in your example I would have written it as:

class my_class {
  static function on_load() {
    add_action( 'init', array( __CLASS__, 'init' ) );
  }
  static function init() {}
}
my_class::on_load();

remove_action( 'init', array( 'my_class', 'init' ) );

The reason I chose this design pattern over using class instances include:

1.) it only adds one global symbol, i.e. only the class name and not a global variable too.
2.) There's no benefit to using instances (that I've identified) when the methods are used for hooks; we only need a "singleton."
3.) Using this pattern the plugin user can easily remove filters without me having (to remember to) define a variable in the global namespace.

So, the questions are:

1.) Am I missing something here why it might be preferable to use an instance rather than a class?
2.) If I'm not missing something why have we not promoted the pattern above rather than the instance equivalent (other than it just not occurring to people?)

Thanks.

-Mike



More information about the wp-hackers mailing list