好吧,我正在为我的网站制作一个会员班。我想尽可能优化它。目前,构造函数可以使用($ 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;
}
}
}
答案 0 :(得分:5)
一些想法:
$resource
为"ddd"
,您希望会员member_id
为1
吗?member_list
不应该创建新的Member
对象(或者这个类被调用的任何对象)而不是简单地追加行数据吗?答案 1 :(得分:5)
首先,不要在构造函数中工作。其次,有很多套餐可以完全按照您的要求去做,而且做得非常好。
您要编写的内容称为模型。它是一个镜像数据库中的表的类。使用成熟的ORM(对象关系映射器)包(如Propel或Doctrine)自动生成基于数据库模式的类。我个人推荐Propel over Doctrine(尽管它们都是很棒的包)。
另外,我建议您使用symfony php framework,它将Propel集成为其ORM(同样,您可以将Doctrine用作Symfony的替代ORM)。
最后,不要使用全局变量。围绕任何访问资源编写一个类。进行静态调用以检索其单例实例(如Database :: getInstance())是访问数据库(或任何其他)资源的首选方法。
祝你好运