在类对象中创建静态成员并为特定函数调用该成员是一个好主意

时间:2011-04-19 10:11:33

标签: php optimization static-methods

在类对象中创建静态成员并为特定函数调用该成员是一个好主意吗?喜欢:

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 个答案:

答案 0 :(得分:1)

如果要限制对类的访问,并且不允许实例化它,则第一种方法可能很有用。例如:

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 :(得分:1)

时使用这些功能
  • 你不想允许,创造 来自外部的班级实例 上课,间接你想做 构造函数私有或受保护。
  • 或者您希望仅允许整个请求的单个实例(一个请求)。对于。例如。数据库,文档等的类。

答案 2 :(得分:0)

通常应避免使用静态方法 - 它们会使API和重构复杂化。当初始化可能抛出异常(从文件读取等)和私有实用程序方法时,我只使用静态方法作为类构造函数的替代。