phpoopobjectgod-object

I have a class with 14 static methods and 4 static properties - is that bad?


I have been writing a PHP class that is exactly 450 lines long and it contains 14 static methods and 4 static properties as well as 6 constants (and private __construct() and __clone()).

I am wondering here is that am I doing something wrong, is my class evil?

When you use the class, you always call a single method like:

MyClass::coolMethod();

and then you leave it alone altogether so it feels that it would be stupid to make it constructable?

There's really not much point in constructing objects out of it, because it is more like a tool that contains a few methods that you can just call directly.

Actually, out of those 14 methods, 7 of them are public -- the rest are private for the class to use.


Solution

  • You should avoid static as much as global.

    Statics give you the same disadvantages globals give you. Whenever you are using any class methods, you are hardcoding a dependency on that class into the consuming code. The result is less maintainable tightly coupled code. This can easily be avoided by avoiding statics altogether and a disciplined use of Dependency Injection.

    You cannot inject and pass around static classes, so for instance when you have to unit-test them, you cannot mock them (or at least only with some effort). It's just plain painful. Static methods are death to testability.

    Also, keep in mind that classes should do only one thing. They should have a single responsibility. Go through your class to see if there is stuff in there that's better placed somewhere else to avoid writing a God Class.