Does static method in PHP have any difference with non-static method?

Except that, if you try to use $this in your method, like this :

class t {
    protected $a = 10;
    public function tt() {
        echo $this->a;
        echo 1;
    }
}
t::tt();

You’ll get a Fatal Error when calling the non-static method statically :

Fatal error: Using $this when not in object context in ...\temp.php on line 11

i.e. your example is a bit too simple, and doesn’t really correspond to a real-case 😉

Also note that your example should get you a strict warning (quoting) :

Calling non-static methods statically
generates an E_STRICT level warning.

And it actually does (At least, with PHP 5.3) :

Strict Standards: Non-static method t::tt() should not be called statically in ...\temp.php on line 12
1

So : not that good 😉

Still, statically calling a non-static method doesnt’t look like any kind of good practice (which is probably why it raises a Strict warning), as static methods don’t have the same meaning than non-static ones : static methods do not reference any object, while non-static methods work on the instance of the class there’re called on.

Once again : even if PHP allows you to do something (Maybe for historical reasons — like compatibility with old versions), it doesn’t mean you should do it !

Leave a Comment