PHP类应该如何与MySQL数据库交互?
前几天,在开发我的PHP项目并实现PHP类应该如何与MySQL数据库交互?,php,mysql,Php,Mysql,前几天,在开发我的PHP项目并实现User类时,我开始想知道这个类应该如何与项目使用的MySQL数据库交互 让我从一个例子开始:假设我在User类中有一个getName()方法,它返回用户的真实姓名。实现该方法的更合适的方法是什么 我提出了两个解决方案: 我将DB查询放在getName()中,只得到我需要的东西,如下所示: public function getName() { // MySQL query code here } private $name; // Load al
User
类时,我开始想知道这个类应该如何与项目使用的MySQL数据库交互
让我从一个例子开始:假设我在User
类中有一个getName()
方法,它返回用户的真实姓名。实现该方法的更合适的方法是什么
我提出了两个解决方案:
getName()
中,只得到我需要的东西,如下所示:
public function getName() {
// MySQL query code here
}
private $name;
// Load all user data inside the class' structure
public function load() {
$this->name = // MySQL query here
}
public function getName() {
return $this->name;
}
User
类中创建了一个load()
方法,加载类结构中的所有用户数据,然后getName()
如下所示:
public function getName() {
// MySQL query code here
}
private $name;
// Load all user data inside the class' structure
public function load() {
$this->name = // MySQL query here
}
public function getName() {
return $this->name;
}
所以,问题是:什么是更好的方法?为什么?有更好的方法吗?及时运行查询并只运行一次(除非您知道该值可能会更改),请尝试以下操作:
class User {
protected $data;
function getName()
{
if (!isset($data['name'])) {
// if you can load more than just $this->data['name'] in one query
// you probably should.
$this->data['name'] = // query here
}
return $this->data['name'];
}
}
除了这个问题有点广泛(因为有无数的模式),您提到的第二种方式在IMO中更好,为了补充这一点,我还建议提供ID作为一个参数,您可以使用它构建一个查询,以按ID获取用户,然后手动分配所有属性(从获取的行)无论是哪种方式,都要考虑存储/缓存结果,这样每次在对象上使用GETNEY时,就不会进行查询。 此外,考虑不要使用ORM/DBAL解决方案来解决所有这些问题。
也检查懒惰加载和
两种方式,考虑存储/缓存结果,这样每次使用该对象上的GETNEY时,都不会进行查询。此外,考虑不要使用ORM/DBAL解决方案,如PROPLE或Orthic,也检查懒惰加载和活动记录模式@ and ReScSerji,发现您的评论非常有用。如果你写下答案,我会标记:)你不认为在一个查询中读取6个字段的开销值得不做6个查询,因此,加载应该加载相关表中的所有列吗?@AndreschSerj加载所有列最好,而不是$this->data['name'],可能只是$this->data=getQueryResultsarra();代码>我的确切意思是:D