This is PHP 4 backwards compatibility. In PHP 4 you could not differ between an object method and the global function written as a static class method. Therefore both did work.

However with the changes in the object model with PHP 5 - http://php.net/oop5 - the static keyword has been introduced.

And then since PHP 5.1.3 you get proper strict standard warnings about those like:

Strict Standards: Non-static method Foo::bar() should not be called statically

And/Or:

Strict Standards: Non-static method Foo::bar() should not be called statically, assuming $this from incompatible context

which you should have enabled for your development setup. So it's merely backwards compatibility to a time where the language couldn't differ enough so this was "defined" at run-time.

Nowadays you can define it already in the code, however the code will not break if you still call it "wrong".

Some Demo to trigger the error messages and to show the changed behavior over different PHP versions: http://3v4l.org/8WRQH