C'est PHP 4 rétro-compatibilité. En PHP 4, vous ne pouviez pas différer entre une méthode de l'objet et de la fonction globale écrite comme une méthode de classe statique. Par conséquent, les deux ont fait le travail.
Cependant, avec les changements dans le modèle objet de PHP 5 - http://php.net/oop5 - le mot-clé static a été introduit.
Et puis depuis PHP 5.1.3 vous bénéficiez d'une véritable norme stricte des avertissements à propos de ceux qui, comme:
Des Normes strictes: Non méthode statique Foo::bar() ne devraient pas être appelée de façon statique
Et/Ou:
Des Normes strictes: Non méthode statique Foo::bar() ne devraient pas être appelée de façon statique, en supposant que $this de contexte incompatible
qui doit être activée pour le développement de votre installation. Donc, c'est simplement la compatibilité en arrière à une époque où la langue ne pouvait pas différer assez donc c'est "défini" au moment de l'exécution.
Aujourd'hui, vous pouvez déjà défini dans le code, mais le code ne fonctionnera pas si vous avez encore l'appeler "mal".
Certains de Démonstration pour déclencher les messages d'erreur et de montrer le changement de comportement sur les différentes versions de PHP: http://3v4l.org/8WRQH