Первый метод может быть полезен, если вы хотите ограничить доступ к классу и не разрешить его создание. Например:
class Users {
private function __construct($strUsername, $strPassword) {
// this class can now not be instantiated
// except within itself
}
public static Login($strUsername, $strPassword)
{
return new self($strUsername, $strPassword);
}
}
Это вынуждает пользователей вашего класса всегда использовать статический метод для получения объекта User, что может быть желательно, если вы всегда хотите ограничить использование.
Как всегда, это во многом зависит от того, что вы хотите сделать. static
похож на инструмент, и вы используете его, когда это подходящий инструмент для работы под рукой.