Мне ужасно жаль, что я задал такой глупый вопрос, но я новичок в ООП и пытаюсь выяснить, для чего используются статические методы. Вот пример кода 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()
, где функция относится к классу, но не привязана к какому-либо конкретному экземпляру.