Хотя у статики могут быть проблемы, как указано в комментариях, у них есть несколько применений.
Тот, который я нашел весьма полезным, это "именованные конструкторы".
Обычно класс имеет единственный конструктор. Но что, если класс можно инициализировать несколькими различными способами?
Например, возможно, ваше приложение поддерживает создание пользователей с адресом электронной почты или из идентификатора пользователя Facebook ...
class User {
public function __construct($emailOrFbUserId) { }
}
Как вы можете видеть выше, может показаться, что параметр в конструкторе был немного запутанным при использовании класса.
Вместо этого, написав это так ...
class User {
private function __construct() { }
public static function fromEmailAddress($email) {
$user = new User();
//assuming there's a private field called email
$user->email = $email;
return $user
}
public static function fromFacebookUserId($id) {
...
}
}
//usage example
$user = User::fromEmailAddress('foo@bar.com');
... и это внезапно приобретает гораздо больший смысл.