哪个更好的PHP类查询?

时间:2011-01-19 05:28:49

标签: php oop class function

我有PHP类,它包含来自数据库的查询数据的函数。第一个是

class x{

  public $var1;
  public $var2;

  function __construct(){ }

  function getX($primkey){
    $sql = mysql_qyery("SELECT * FROM x_table WHERE primkey='$primkey'");
    $row = mysq;_fetch_assoc($sql);
    $this->var1 = $row['var1'];
    $this->var2 = $row['var2'];
  }

}

另一个是

class x{

  public $var1;
  public $var2;

  function __construct(){ }

  function getX($primkey){
    $sql = mysql_qyery("SELECT * FROM x_table WHERE primkey='$primkey'");
    $row = mysq;_fetch_assoc($sql);
    return $row;
  }

}

两个类在函数getX()上有一些区别。第一个类将数据从数据库放入类变量,但第二个类通过数组从数据库返回整个数据。

我想知道两个班级的表现,哪一个更好。哪一个对编程或任何想法都有好处?

问候。

3 个答案:

答案 0 :(得分:0)

使用第一个表单,您可以灵活地执行其他转换和非对称映射。因此,从这个意义上说,您真正创建了一个Model类,它可以对您的实际数据源进行抽象表示。

使用第二种形式,如果您遵循Convention Over Configuration(CoC)范例并明确定义您的约定,它可能会起作用。但是,在线下,你可能会遇到你必须做出例外的情况。我建议采用上述更灵活的方法,作为对未来例外情况的预期。

切向:如果您不是纯粹出于教育目的而编写自己的对象映射,或者出于其他一些合理的原因,您是否看过RedBeanPHP或其他替代方案?

答案 1 :(得分:0)

class x{

  public $row;

  function __construct(){ }

  function getX($primkey){
    $sql = mysql_qyery("SELECT * FROM x_table WHERE primkey='$primkey'");
    this->$row = mysq;_fetch_assoc($sql);

  }

}

我的建议是这样的。您已正确整合封装,并且其动态适应未来的要求。

也许你也可以添加getter功能。

答案 2 :(得分:0)

我会创建一个数据库适配器,然后创建一个数据映射器并使用一个使用数据映射器的模型。

在这种情况下,调用$ model-> find()会调用对象find方法,该方法调用Data Mapper查找方法向数据库适配器发出查询。