Это PHP 4 обратная совместимость.В PHP 4 вы не могли различать метод объекта и глобальную функцию, написанную как метод статического класса.Следовательно, оба сработали.
Однако с изменениями в объектной модели с PHP 5 - http://php.net/oop5 - было введено ключевое слово static.
А затем, начиная с PHP 5.1.3вы получите правильные строгие стандартные предупреждения о таких как:
Строгие стандарты: Нестатический метод Foo :: bar () не должен вызываться статически
И / или:
Строгие стандарты: Нестатический метод Foo :: bar () не следует вызывать статически, предполагая $ this из несовместимого контекста
, который вы должны включить для своегонастройка разработки.Так что это просто обратная совместимость со временем, когда язык не мог достаточно различаться, поэтому он был «определен» во время выполнения.
В настоящее время вы можете определить его уже в коде, однако код не будет нарушаться, еслиВы все еще называете это "неправильно".
Некоторая демонстрация для запуска сообщений об ошибках и отображения измененного поведения в разных версиях PHP: http://3v4l.org/8WRQH