В менее ориентированном на код характер, вот как я определяю статические методы (я буду использовать банк в качестве примера):
Если у вас был банковский класс и вы хотели бы открыть новый банк, вы бы использовали:
$b = new Bank;
Теперь предположим, что вы хотите добавить нового сотрудника в этот банк. Просто позвоните:
$b->addEmployee( 'Person' );
Поскольку вы применяете действие к созданному вами банку, а не к компании, которая владеет банком в целом, вы используете метод участника. Теперь предположим, что компания продала некоторые активы и заработала деньги. Чтобы обновить их общую сумму, вы бы назвали это:
Bank::addToCompanyBalance( 1000000 );
Обратите внимание, что поскольку действие не было применено к банку, который мы создали, мы использовали статический метод.
Конечно, этот пример очень упрощен, но мне нравится аналогия. В более программном смысле статические члены хороши для:
Одиночки
class Singleton
private static $instance;
private function __construct() {}
private function __clone() {}
public static function getInstance() {
if( !isset( self::$instance ) ) self::$instance = new IamOne;
return( self::$instance );
}
}
Создание классов, которые могут потерпеть неудачу
Ex. Класс обработчика файлов может не всегда хотеть создать новый объект (скажем, переданный файл не существует или не может быть открыт).
С абстрактными классами
Некоторые классы могут не захотеть иметь экземпляры (например, маршрутизатор, который интерпретирует запрос пользователя). Абстрактные классы, однако, могут вызываться статически и поэтому могут использовать статические методы.