在这种情况下是否需要制作一个对象?

时间:2011-05-08 02:26:13

标签: php oop singleton

所有。这是情况,我有php页面,这是做一些注册,登录,这些与用户有关的事情,所以,我们称之为user.php。

在user.php中,我有一个用户类有以下方法:

-public static function register($aEmail, $aPassword)
-public static function login($aEmail, $aPassword)
-public static function logout($aEmail, $aSessionKey)

因此,当用户登录时,我会做这样的事情:

if(isset($_POST["email"]) && isset($_POST["password"]) && isset($_POST["action"])){ 
    $email = htmlspecialchars($_POST["email"]);
    $password = htmlspecialchars($_POST["password"]);  

if($_POST["action"] == login){
    $user = new User();
     //It will print the session key
    $user->doLoginAndPrintTheSessionKey($email, $password); 
}

它的效果很好,但问题是,如果我将User作为一个对象或一个单独的用户,似乎没有意义保留User对象,因为当用户发出请求时,我需要使用他的电子邮件和会话找到处理他的记录的关键.....

像这样......

public static function postAComment($aEmail, $aSessionKey, $aCommment){
    BOOL $isSuccess = FALSE;

        //check the session key is valid or not
    if(self::isUserValidationValid($aEmail, $aSessionKey)){ 
       //make a sql statement that write aComment to DB

       //execute the sql statement

       //if execute success, return isSuccess = TRUE;

    }

    return $isSuccess;      
}

正如你所看到的,我可以在单例类中完成所有这些,所以,我的问题是......在这种情况下是不是需要创建一个useer对象?谢谢。

2 个答案:

答案 0 :(得分:2)

你应该创建一个User类,但它不应该是一个单例。

拥有User对象可以简化您的API。你会:

  register( $aPassword )
  login( $aPassword )
  logout( $aSessionKey )

而不是:

register($aEmail, $aPassword)
login($aEmail, $aPassword)
logout($aEmail, $aSessionKey)

您通过构造函数传递$ aEmail。

答案 1 :(得分:1)

应用单例模式在这里没有任何好处。它很少用PHP这样的脚本语言。你没有通过添加模拟单例所需的额外逻辑来完成任何事情(PHP无论如何都不允许实际的。)

最后,在某些情况下,您可能希望创建两个用户对象。想象一下允许扫描重复用户帐户的管理工具。这可能不在您的列表中,并且对于大多数网站而言可能毫无意义,但您不能完全排除某些人可能需要以这种方式利用您的用户类。

“单身人士”的一点是他们有一个吸引人的名字,但不是很多应用程序。忘掉它。 http://sites.google.com/site/steveyegge2/singleton-considered-stupid


但我想你的主要问题是只使用静态方法来处理所有事情。是的,这是有道理的。如果您实际上没有用例来实例化用户对象,那么请不要。创建一个实用工具方法,如果这是你可以逃脱的。 http://en.wikipedia.org/wiki/KISS_principle

相关问题