【问题标题】:Is there need to make an Object in this situation?在这种情况下是否需要制作一个对象?
【发布时间】:2011-05-08 02:26:13
【问题描述】:

全部。这里是这样的情况,我有一个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); 
}

效果很好,但问题是,我应该将用户作为对象还是仅作为单例,似乎没有必要保留用户对象,因为当用户提出请求时,我需要使用他的电子邮件和会话找到处理他的记录的关键.....

像这样..

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;      
}

如您所见,我可以在单例类中完成所有这些操作,所以,我的问题是... ...在这种情况下不需要创建用户对象吗?谢谢。

【问题讨论】:

    标签: php oop singleton


    【解决方案1】:

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

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

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

    代替:

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

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

    【讨论】:

      【解决方案2】:

      在这里应用单例模式没有任何好处。它很少使用像 PHP 这样的脚本语言。通过添加模拟单例所需的额外逻辑,你什么也做不了(PHP 无论如何都不允许真实的)。

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

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


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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多