好吧,我正在为我的网站制作一个会员班.我想尽可能优化它.目前,构造函数可以使用($ resource)int(从数据库中的一个成员获取信息,基于id)或int数组(从数据库中获取多个成员,并将它们存储在数组成员变量中) ).
我想知道在我继续创建我的网站的更多部分之前,我可以使用下面的代码块进行任何改进.什么可以改变,使其更好?做这种事情我应该遵循更好的布局吗?
public function __construct($resource) {
global $database;
if (is_string($resource) || is_int($resource)) {
$resource = (int)$resource;
$query = $database->query("SELECT * FROM members WHERE member_id = {$resource} LIMIT 1");
$row = $database->get_row($query);
foreach ($row as $key => $value) {
$this->field[$key] = $value;
}
} else if (is_array($resource)) {
$query = $database->query("SELECT * FROM members WHERE member_id IN(" . implode(",",$resource) . ")");
while ($member = $database->get_row($query)) {
$this->member_list[$member['member_id']] = $member;
}
}
}
Run Code Online (Sandbox Code Playgroud)
一些想法:
$resource是"ddd",你想用会员member_id的1?member_list应该创建新Member对象(或者这个类被调用的任何东西)而不是简单地追加行数据吗?首先,不要在构造函数中工作.其次,有很多软件包可以完成您正在尝试做的事情,并且做得非常好.
你想写的东西叫做模特.它是一个镜像数据库中的表的类.使用成熟的ORM(对象关系映射器)包(如Propel或Doctrine)自动生成基于数据库模式的类.我个人推荐Propel over Doctrine(尽管它们都是很棒的包).
另外,我建议你使用symfony php框架,它将Propel集成为ORM(同样,你可以使用Doctrine作为替代ORM与Symfony).
最后,不要使用全局变量.围绕任何访问资源编写一个类.进行静态调用以检索其单例实例(如Database :: getInstance())是访问数据库(或任何其他)资源的首选方法.
祝你好运