繁体   English   中英

PHP类最佳实践和类结构

[英]PHP Class best practices and class structures

我目前正在使用PHP5为我的小型网站创建一个简单的CMS。 这是我的第一个PHP大项目。 首先,我正在创建所需的类,这些类将使我的工作稍微简化一些,然后我就陷入了困境。 我需要您对UserInfo类中以下函数的看法:

public function setUser($id) {
        if(!isset($id)) {
            return false;
        }

        session_start();
        $conn = new mysql($_SESSION['DBCONNINFO']);
        $sql = "SELECT
                usr.ID,
                usr.USERNAME as TUSERNAME,
                usr.FIRST_NAME,
                usr.LAST_NAME,
                usr.PHONE,
                usr.MOBILE,
                usr.EMAIL,
                usr.ADDITIONAL_INFO,
                usr.LAST_LOGIN_DATE,
                usr.USER_GROUP_ID
                FROM cms_users usr
                WHERE usr.id = " . $id;

        $result = $conn->query_cust($sql);
        $conn=null;

        foreach ($result as $row) {
            $this->id = $row['usr']['ID'];
            $this->username = $row['usr']['TUSERNAME'];
            $this->firstname = $row['usr']['FIRST_NAME'];
            $this->lastname = $row['usr']['LAST_NAME'];
            $this->phone = $row['usr']['PHONE'];
            $this->mobile = $row['usr']['MOBILE'];
            $this->email = $row['usr']['EMAIL'];
            $this->additional_info = $row['usr']['ADDITIONAL_INFO'];
            $this->last_login_date = $row['usr']['LAST_LOGIN_DATE'];
            $this->user_group = $row['usr']['USER_GROUP_ID'];
        }

        return true;
    }  

我是否以正确的方式进行操作,不是在谈论语法,因为我现在专注于类结构,设计和最佳实践-任何意见都将受到赞赏。

例如,我可以在类构造函数中调用session_start()并使用其中的var而不每次在函数中都调用它吗?

我应该通过close()函数关闭数据库连接还是$conn=null可以接受!?

将数据库信息存储在会话类中是不好的做法吗? 如果是,将其存储为“全局”变量-$ _GLOBAL!?

如果有“在5分钟内为假人编写PHP bes练习课程结构”,请通知我:)

提前致谢。

使用define定义所有常量。
例如:

define('DBCONNINFO', "something");

同样,您只需要调用一次session_start()即可,它可以在脚本中的任何位置进行。

如果仍然使用会话,则对于每个请求从数据库中获取数据都没有多大意义。 在这种情况下,为什么在setUser()方法中调用session_start()?

当您仅提供一个方法时,我们就无法对类结构进行评论。

而且,由于离开PHP的数据表示应该适合于数据将要到达的对象(以防止SQL注入,电子邮件标头注入,CSS ...),因此,最好将对数据表示的更改推迟到就在它离开PHP之前。 例如

$sql = "SELECT
       ....
            WHERE usr.id = " . mysql_real_escape_string($id);

(或使用绑定参数)

但是,由于用户通常通过用户名而不是用户ID来标识自己,因此它意味着$ id来自用户提供的数据以外的其他位置-在这种情况下呢? 还有,为什么在已经获得会话的标识符(应该在其中存储数据)的情况下使用它作为标识符。

还是要使用此类来处理与当前会话用户以外的其他用户有关的数据-在这种情况下, 无法在其中存在session_start()。

抱歉-但这不是经过深思熟虑的代码,也不是一个很好提出的问题。

顺便说一句,将连接设置为null不会关闭数据库连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM