No, you cannot 'initialise' or instantiate the class through a hook, not directly. Some additional code is always required ( and it is not a desirable thing to be able to do that, as you're opening a can of worms for yourself.
Here is a better way of doing it:
class MyClass {
function __construct() {
add_action('admin_init',array(&$this,'getStuffDone'));
}
function getStuffDone() {
// .. This is where stuff gets done ..
}
}
$var = new MyClass();
Of course one could create an interface class to simplify it for the general case even further:
class IGetStuffDone {
function IGetStuffDone(){
add_action('admin_init',array(&$this,'getStuffDone'));
}
public abstract function getStuffDone();
}
Which would let you say:
class CDoingThings extends IGetStuffDone {
function getStuffDone(){
// doing things
}
}
$var = new CDoingThings();
Which would then automatically add all the hooks, you just need to define what exactly is being done in a subclass and then create it!
On Constructors
I wouldn't add a constructor as a hook function, it's bad practice, and can lead ot a lot of unusual events. Also in most languages a constructor returns the object that is being instantiated, so if your hook needs to return something like in a filter, it will not return the filtered variable as you want, but instead it will return the class object.
Calling a constructor or a destructor is very, very, very bad programming practice, no matter which language you're in, and should never be done.
Constructors should also construct objects, to initialise them ready for use, not for actual work. Work to be done by the object should be in a separate function.
Static class methods, and not needing to instantiate/initialise at all
If your class method is a static class method, you can pass the name of the class in quotes rather than &$this as shown below:
class MyClass {
public static function getStuffDone() {
// .. This is where stuff gets done ..
}
}
add_action('admin_init',array('MyClass','getStuffDone'));
Closures & PHP 5.3
Sadly you cannot avoid the line creating the new class. The only other solution to skipping it would involve boiler plate code that still has that line, and would require PHP 5.3+ e.g.:
add_action('admin_init',function(){
$var = new MyClass();
$var->getStuffDone();
});
At which point you may as well skip the class, and just use a function:
add_action('admin_init',function(){
// do stuff
});