所有。这是情况,我有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对象?谢谢。
答案 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