Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在这种情况下是否需要制作对象?_Php_Oop_Singleton - Fatal编程技术网

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

Php 在这种情况下是否需要制作对象?,php,oop,singleton,Php,Oop,Singleton,全部。这里是这样的情况,我有一个php页面,它正在做一些注册、登录等与用户相关的事情,所以,让我们称它为user.php 在user.php中,我有一个user类,它有以下方法: -public static function register($aEmail, $aPassword) -public static function login($aEmail, $aPassword) -public static function logout($aEmail, $aSessionKey)

全部。这里是这样的情况,我有一个php页面,它正在做一些注册、登录等与用户相关的事情,所以,让我们称它为user.php

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

-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这样的脚本语言。通过添加模拟单例所需的额外逻辑,您将一事无成(PHP无论如何都不允许使用真实的逻辑)

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

“Singleton”的意思是它们有一个吸引人的名字,但不是很多应用程序。算了吧



但我猜你的主要问题是关于使用静态方法来处理一切。是的,这是有道理的。如果您实际上没有实例化用户对象的用例,那么就不要。创建一个实用方法,如果这是你可以摆脱的

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

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

“Singleton”的意思是它们有一个吸引人的名字,但不是很多应用程序。算了吧



但我猜你的主要问题是关于使用静态方法来处理一切。是的,这是有道理的。如果您实际上没有实例化用户对象的用例,那么就不要。创建一个实用方法,如果这是你可以摆脱的

您应该包装一个用户类,但它不应该是单例

拥有用户对象将简化您的API。你应该:

  register( $aPassword )
  login( $aPassword )
  logout( $aSessionKey )
而不是:

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

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

您应该包装一个用户类,但它不应该是单例

拥有用户对象将简化您的API。你应该:

  register( $aPassword )
  login( $aPassword )
  logout( $aSessionKey )
而不是:

register($aEmail, $aPassword)
login($aEmail, $aPassword)
logout($aEmail, $aSessionKey)
通过构造函数传递$aEmail