[英]PHP Best Practices for querying a group of class objects with summarized data
[英]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.