Это хорошая идея, чтобы создать статический член в объекте класса и вызвать этот член для конкретной функции - PullRequest
2 голосов
/ 19 апреля 2011

Является ли хорошей идеей создать статический член в объекте класса и вызвать его для определенной функции?например:

class Users
{
     public static Login(strUsername, strPassword)
     {
          $objThis = new Users();
          ....
     }
}

и вызвать его как:

Users::Login('admin', 'admin');

или второй метод:

class Users
{
     public Login(strUsername, strPassword)
     {
          //$objThis = new Users();
          ....
     }
}

и назвать его следующим образом:

$objThis = new Users();
$objThis->Login('admin','admin');

Ответы [ 3 ]

1 голос
/ 19 апреля 2011

Первый метод может быть полезен, если вы хотите ограничить доступ к классу и не разрешить его создание. Например:

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 похож на инструмент, и вы используете его, когда это подходящий инструмент для работы под рукой.

1 голос
/ 19 апреля 2011

Эти функции используются, когда

  • Вы не хотите разрешать, создавать экземпляр класса извне класс, косвенно хочешь сделать конструктор частный или охраняемый.
  • Или Вы хотите разрешить только один экземпляр класса для всего запроса (один запрос). За. например. Классы для базы данных, документа и т. Д.
0 голосов
/ 19 апреля 2011

Обычно статических методов следует избегать - они усложняют API и рефакторинг. Я использую статические методы только в качестве альтернативы конструкторам классов, когда инициализация может вызвать исключение (чтение из файла и т. Д.) И для методов частных утилит.

...