Is there any way I can check if a method is being called statically or on an instantiated object?
Just return the class as new within the function.
return new self();