Статические методы в PHP: зачем?

Мне ужасно жаль, что я задал такой глупый вопрос, но я новичок в ООП и пытаюсь выяснить, для чего используются статические методы. Вот пример кода PHP:

class foo{ static function bar(){ //do something here } public function baz(){ //do something different } } 

Документация гласит:

Объявление свойств класса или методов как статических делает их доступными без необходимости создания экземпляра класса

Однако оба метода из приведенного выше примера могут быть доступны извне класса:

 foo::bar(); foo::baz(); 

Он работает (по крайней мере, для PHP 5.3, который я использую) без создания экземпляра класса foo. Итак, в чем смысл использования статических методов, если оба способа работают?

Простите меня еще раз за такой вопрос. Я действительно старался найти это самостоятельно без успеха. Благодарю.

Статические методы – это глобально доступные инструменты (помощники) и часто используются чрезмерно. Статические методы – это смерть для проверки, и их следует избегать почти полностью.

Их преимуществом, а также недостатком является то, что они живут в глобальном масштабе, вы можете их вызывать из любого места, что в большинстве случаев вызывает у них запах кода, потому что они разрушают инкапсуляцию.

На языковом уровне, как упоминает Колинк, такие вещи, как mysqli:real_escape_string() имеют смысл, но на уровне приложений вы обычно не хотите загрязнять свою глобальную область и нарушать такую ​​инкапсуляцию. Вам лучше подумать о том, какие инструменты вам действительно нужны, и где и внедрить их в значимые группы (классы).

Ваш foo::baz() вызывает предупреждение в строгом режиме (который всегда должен быть включен):

Строгие стандарты: нестатический метод foo: baz () не следует называть статически в файле yourfile.php on line x

Как правило, они могут использоваться для «вспомогательных» функций, таких как mysqli::real_escape_string() , где функция относится к классу, но не привязана к какому-либо конкретному экземпляру.